Microsoft Access 掲示板

印刷設定フォームを使い回ししたい等

4 コメント
views
4 フォロー

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部が動的にできるかどうか)

それともう一つ質問がありまして(同じトピックス内ですみません)レポート上に小さい埋め込み画像があります。この画像を条件により表示/非表示にしたいのです。このレポートは入力フォーム上のボタンでプレビューさせ、フォーム上の画像あり/なしのオプションボタンで条件設定をしようと考えてます。

XS
作成: 2024/03/05 (火) 08:54:50
通報 ...
1

入力用フォームに配置したコマンドボタンでレポートプレビューさせた時にオリジナルの簡単な印刷設定フォーム(名前:F印刷設定)も一緒に開く様にしてます。

レポートをプレビューした直後に印刷設定フォームも開くということですね。
ならば、Screen.ActiveReport で直前に開いたレポートを取得できますので、それを利用すればどうでしょう。

F印刷設定のフォームモジュール

Option Compare Database
Option Explicit
Private rptName As String  
    
Private Sub Form_Open(Cancel As Integer)
    On Error Resume next
    rptName = Screen.ActiveReport.Name
    If Err <> 0 Then
        Cancel = True
        MsgBox "レポートが開いていません。"
    End If
End Sub

Private Sub ボタン1_Click()
    If vbOK = MsgBox("直ちに印刷を開始します。", vbOKCancel) Then
        DoCmd.OpenReport rptName, acViewNormal, "", "", acNormal
    Else
        MsgBox "印刷処理を中止します。", vbCritical
        End
    End If
End Sub

Private Sub ボタン2_Click()
    DoCmd.SelectObject acReport, rptName, False
    DoCmd.RunCommand acCmdPrint
End Sub
2
XS 2024/03/05 (火) 12:28:35 ddfe5@52efc

hatenaさん ありがとうございます。このコードで上手くいきました。Screen.ActiveReportの事は初めて知りました。
ものすごく初歩的な質問なのですが Private rptName As String  はVBA画面の一番上に記述するから参照出来るのですね?(フォーム内の色々な所に)
あともう一つの質問の方の レポート上に小さい埋め込み画像(イメージ1)の表示有無はどうやって実現可能でしょうか?

3

ものすごく初歩的な質問なのですが Private rptName As String  はVBA画面の一番上に記述するから参照出来るのですね?(フォーム内の色々な所に)

モジュールレベル変数となり、モジュール内のコードならどこからでも参照できる変数になります。他のモジュールからは参照できません。

どの範囲で参照できるかをスコープといいます。「VBA スコープ」のキーワードにWEB検索してみてください。解説ページがいろいろ見つかると思いますので研究してみてください。


レポート上に小さい埋め込み画像があります。この画像を条件により表示/非表示にしたいのです。このレポートは入力フォーム上のボタンでプレビューさせ、フォーム上の画像あり/なしのオプションボタンで条件設定をしようと考えてます。

フォーム上のプレビューボタンでレポートをプレビューするときに、Docmd.OpenReportメソッドの OpenArgs引数でオプショングループの値を渡せばいいでしょう。

下記のような設定と仮定します。

オプショングループ

名前関連付けされたラベルの標題
フレーム1小さい埋め込み画像

このオプショングループ内に下記のオプションボタンが2つ配置してある

名前オプション値関連付けされたラベルの標題
opt表示1表示
opt非表示2非表示

プレビューボタンクリック時

Private Sub プレビューボタン_Click()
    DoCmd.OpenReport "レポート1", acViewPreview, "", "", acWindowNormal, Me.フレーム1.Value
End Sub

レポートの読み込み時

Private Sub Report_Load()
    If OpenArgs = 1 Then
        Me.イメージ1.Visible = True
    Else
        Me.イメージ1.Visible = False
    End If
End Sub
4
XS 2024/03/05 (火) 15:45:23 ddfe5@52efc

hatenaさん重ね重ねありがとうございます。「VBA スコープ」少し調べました。記述位置以外にも Private、Publicで範囲が変わってきますね。使いこなすことが出来れば大分コードが集約されそうです。参考になりました。
OpenArgsも初めて知りました。これも重宝しそうです。
大変お世話になりました。