Accessでレポートがプレビューかマジの印刷(出力)かを判定


判定できると何がいいの?

例えばこんなことができるん。

  • 印刷する時だけ『社外秘』『SAMPLE』とかの透かしを入れられる。
  • プレビューの時だけ補助線を表示できる。(熨斗とかお礼状みたいに見た目の綺麗さが求められる印刷の微調整とかが便利)
  • 『本当に印刷した時』だけ印刷時刻をデータベースに書き込んだりができる。

やり方

'Windowsのuser32のライブラリの機能を拝借して実現するよ!
Private Declare Function is_window_enabled Lib "user32" Alias "IsWindowEnabled" (ByVal hwnd As Long) As Long

'詳細には『detail』という名前つけてます
Private Sub detail_Format(Cancel As Integer, FromatCount As Integer)

    'プレビューか印刷(出力)かを判定して背景画像を表示ONOFF切り替えね!
    If is_window_enabled(Me.hwnd) = 0 Then
        Me.img_back.Visible = True
    Else
        Me.img_back.Visible = False
    End If

End Sub

注意点

フォーマット系のイベントで判定すること!
Report_Open()とかのイベントで判定しちゃダメ。

例えば前述の例をReport_Open()でやったとすると、印刷(出力)の時に背景が表示されないです。
Report_Open()は名前の通り『開く時』に呼び出されるから、印刷する時は実行されないです。

判定を実際使ってみるとこんな感じ

印刷プレビュー の時は背景画像が表示されません。

今回は印刷のスタブとして Microsoft Print to PDF に印刷指示を飛ばします。
『Microsoft Print to PDF』ってなんぞ?って時は下記。
Windows10の標準機能で画像をPDFに変換するんだぞう(余計なソフトは入れない)

印刷(出力)には背景画像が表示されてます。

蛇足

user32を使えばVBAでできないことを結構補えるので便利です。

参考サイトさん

バージョン

Windows 10 Pro バージョン 20H2 OSビルド 19042.804
Access for Microsoft 365 MSO(16.0.13628.20128)32ビット