VBA勉強中の者です。入力用フォームに配置したコマンドボタンでレポートプレビューさせた時にオリジナルの簡単な印刷設定フォーム(名前:F印刷設定)も一緒に開く様にしてます。そのF印刷設定には2つボタンを配置しており、下記コードを記述してます(各クリック時イベント)。
ボタン1:すぐに印刷開始
If vbOK = MsgBox("直ちに印刷を開始します。", vbOKCancel) Then
DoCmd.OpenReport "レポート1", acViewNormal, "", "", acNormal
Else
MsgBox "印刷処理を中止します。", vbCritical
End
End If
ボタン2:ダイアログを表示
DoCmd.SelectObject acReport, "レポート1", False
DoCmd.RunCommand acCmdPrint
これはこれで動作出来ているのですがこのF印刷設定(フォーム)を他のレポートにも使い回ししたいのです。レポート毎に印刷設定フォームを作成するのも手間だなと思いまして。(コードのレポート1部が動的にできるかどうか)
それともう一つ質問がありまして(同じトピックス内ですみません)レポート上に小さい埋め込み画像があります。この画像を条件により表示/非表示にしたいのです。このレポートは入力フォーム上のボタンでプレビューさせ、フォーム上の画像あり/なしのオプションボタンで条件設定をしようと考えてます。
レポートをプレビューした直後に印刷設定フォームも開くということですね。
ならば、Screen.ActiveReport で直前に開いたレポートを取得できますので、それを利用すればどうでしょう。
F印刷設定のフォームモジュール
hatenaさん ありがとうございます。このコードで上手くいきました。Screen.ActiveReportの事は初めて知りました。
ものすごく初歩的な質問なのですが Private rptName As String はVBA画面の一番上に記述するから参照出来るのですね?(フォーム内の色々な所に)
あともう一つの質問の方の レポート上に小さい埋め込み画像(イメージ1)の表示有無はどうやって実現可能でしょうか?
モジュールレベル変数となり、モジュール内のコードならどこからでも参照できる変数になります。他のモジュールからは参照できません。
どの範囲で参照できるかをスコープといいます。「VBA スコープ」のキーワードにWEB検索してみてください。解説ページがいろいろ見つかると思いますので研究してみてください。
フォーム上のプレビューボタンでレポートをプレビューするときに、Docmd.OpenReportメソッドの OpenArgs引数でオプショングループの値を渡せばいいでしょう。
下記のような設定と仮定します。
オプショングループ
このオプショングループ内に下記のオプションボタンが2つ配置してある
プレビューボタンクリック時
レポートの読み込み時
hatenaさん重ね重ねありがとうございます。「VBA スコープ」少し調べました。記述位置以外にも Private、Publicで範囲が変わってきますね。使いこなすことが出来れば大分コードが集約されそうです。参考になりました。
OpenArgsも初めて知りました。これも重宝しそうです。
大変お世話になりました。