Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2013)
クロス集計クエリーの結果の印刷
投稿日時: 18/02/19 18:48:36
投稿者: WORKS

受注データを基に日付を指定してクロス集計クエリーで現場用の生産計画を作成し
印刷したいと思います。
日付の指定によって列見出しは変化し、また列数も変化します。
通常のレポートではそういった対応ができるでしょうか?
クロス集計クエリーをデータシートビューで表示したものが印刷できれば、
それで構いません。
よろしくお願いします。

回答
投稿日時: 18/02/20 09:41:15
投稿者: Suzu

引用:
クロス集計クエリーをデータシートビューで表示したものが印刷できれば、
それで構いません。

 
これ、できませんか?

投稿日時: 18/02/21 18:21:51
投稿者: WORKS

Suzuさん回答ありがとうございます。
 
確かに
クエリーをデータシートビュービューで表示し、印刷プレビュー、右クリックで印刷
で可能です(他の方法もあるかもしれません)。
私の捉え方が間違っていたらすみません。
 
今回 VBAで質問させていただいたのは、
フォーム上の生産計画表作成ボタンで印刷まで完了させたいからなのです。

回答
投稿日時: 18/02/22 10:10:35
投稿者: Suzu

> フォーム上の生産計画表作成ボタンで印刷まで完了させたいからなのです。
 
はい。
それで何でお困りなのでしょうか。
 
日付を指定した クロス集計クエリ は出来ているとして、
 
クエリの列幅の自動設定でしょうか。
 手元確認できる環境ではないので、うろ覚えで申し訳ないのですが
  ・サブフォームコントロールにデータシートを配している
    ならサンプルがネットにたくさんあります。探してみてください。
 
  ・クエリを直接開き操作したいなら、そのデータシートを取得する部分のテクニックとして
    Docmd.OpenQuery の直後に、
    Screen.ActiveForm や
    Screen.ActiveControl.Parent.Form を使い、クエリのデータシートビューをフォームとして
    参照できました。(2010ではできたはず。。2013は判りません)
 
  つまづくとすれば上記ふたつが代表的な部分と思います。
 
  べつな部分でつまづいているなら、なにでつまづいているのかを 明記下さい。

回答
投稿日時: 18/02/22 10:31:21
投稿者: sk

引用:
クロス集計クエリーをデータシートビューで表示したものが印刷できれば、
それで構いません。

引用:
今回 VBAで質問させていただいたのは、
フォーム上の生産計画表作成ボタンで印刷まで完了させたいからなのです。

[生産計画表作成ボタン]の[クリック時]イベントが発生した際に
DoCmd.OpenQuery メソッドによってそのクロス集計クエリを開き、
そのまま DoCmd.PrintOut メソッドによってアクティブオブジェクト
(=クロス集計クエリ)の印刷を実行する、というのが
基本的な処理の流れになるのではないかと。
 
引用:
受注データを基に日付を指定してクロス集計クエリーで現場用の生産計画を作成し
印刷したいと思います。

あとは日付条件の入力クエリパラメータへの値渡し
どのような形で実現するか(これは QBF 技法で良いと思いますが)、
Suzu さんが指摘されているようなデータシートの書式設定
行なう必要があるか、印刷実行後にそのクロス集計クエリを閉じるべきか否か、
といった問題が想定されますが、そういった細々とした仕様については
全く言及されていないため、今のところお答えのしようがありません。

投稿日時: 18/02/23 17:57:56
投稿者: WORKS

ありがとうございます。
 

引用:
[生産計画表作成ボタン]の[クリック時]イベントが発生した際に
DoCmd.OpenQuery メソッドによってそのクロス集計クエリを開き、
そのまま DoCmd.PrintOut メソッドによってアクティブオブジェクト
(=クロス集計クエリ)の印刷を実行する、というのが
基本的な処理の流れになるのではないかと。

 
DoCmd.PrintOut[/b] メソッドによって印刷出来ました。
今まで印刷に関しては、レポートを作成しDoCmd.OpenReportで行なっていました。
今回、列数が増減するのにどう対応すればよいか悩んでおりました。
 
データシートの書式設定については、文字の大きさ、列の幅については一度設定したものが
保存されるようで問題有りません。
が余白は一度設定しても保存されないようです。
 
DoCmd.PrintOutでの余白の設定方法 及び
印刷実行後のクロス集計クエリを閉じ方
 
この2点につきご教示願えますでしょうか?

回答
投稿日時: 18/02/23 18:27:14
投稿者: sk

引用:
DoCmd.PrintOutでの余白の設定方法 及び
印刷実行後のクロス集計クエリを閉じ方

(フォームモジュール)
----------------------------------------------------------
Private Sub 生産計画表作成ボタン_Click()
     
    '定数の宣言
    Const TwipPerCm As Long = 567 '1 論理 cm 当たりの twip 値
     
    '変数の宣言
    Dim frm As Access.Form
    Dim strQueryName As String
     
    'クエリ名を設定
    strQueryName = "クエリ名"
     
    'クエリを開く
    DoCmd.OpenQuery strQueryName
         
    'アクティブデータシートの参照
    Set frm = Screen.ActiveDatasheet
     
    '以下ページ設定。各余白を cm 単位で指定
    With frm.Printer
        '上余白
        .TopMargin = 1 * TwipPerCm
        '下余白
        .BottomMargin = 2 * TwipPerCm
        '左余白
        .LeftMargin = 3 * TwipPerCm
        '右余白
        .RightMargin = 4 * TwipPerCm
    End With
     
    'データシートへの参照を解放
    Set frm = Nothing
     
    'アクティブオブジェクトの印刷
    DoCmd.PrintOut
     
    'クエリを閉じる
    DoCmd.Close acQuery, strQueryName, acSaveNo
 
End Sub
----------------------------------------------------------
(斜体部分を適宜修正すること)

投稿日時: 18/02/27 18:14:35
投稿者: WORKS

 有り難うございます。
 
以下でエラーがかかったので
 
>'アクティブデータシートの参照
> Set frm = Screen.ActiveDatasheet
 
フォームをいったん閉じ、イベントプローシージャの最後で
もう一度フォームを開くことで印刷出来ました。
一応解決としたいと思いますが、
もしよろしければ、フォームを閉じないで済む方法があればお願いします。