2018年5月29日火曜日

印刷するプリンター・印刷設定をプログラムで動的に設定 [ACCESS]

ACCESSのレポートのプリンター設定を動的に設定したい!

標準モジュールにレポート印刷関数を作成。
--------------------------------------------------------------------

'==================================================
'レポートを印刷orプレビュー
'
'ReportName:レポート名
'PrintKbn:0=印刷 0<>プレビュー
'==================================================
Public Function PrintReport(ReportName As String, PrintKbn As Variant)
 
    Dim prtName     As String
    Dim setPrt      As Printer
    Dim rpt         As Report

    '警告非表示
    DoCmd.SetWarnings False

    'レポートを開く
    DoCmd.OpenReport ReportName, acViewPreview

    prtName = "プリンター名"
    Set setPrt = Application.Printers(prtName)
         
    Set rpt = Reports(ReportName)

    'レポートにプリンターを設定
    rpt.Printer = setPrt

    '用紙サイズ
    rpt.Printer.PaperSize = acPRPSA4
    '給紙用法
    rpt.Printer.PaperBin = acPRBNAuto
    '印刷向き
    rpt.Printer.Orientation = acPRORPortrait '縦
    rpt.Printer.Orientation = acPRORLandscape '横
    '余白
    rpt.Printer.TopMargin = Round(10 * 56.7, 2)
    rpt.Printer.BottomMargin = Round(20 * 56.7, 2)
    rpt.Printer.LeftMargin = Round(30 * 56.7, 2)
    rpt.Printer.RightMargin = Round(40 * 56.7, 2)

    If PrintKbn = 0 Then
        '印刷
        DoCmd.PrintOut
        'プレビューを閉じる
        DoCmd.Close acReport, ReportName, acSaveNo
    End If

    DoCmd.SetWarnings True

End Function

--------------------------------------------------------------------

後は各印刷の"DoCmd.OpenReport"を"PrintReport"に変更
--------------------------------------------------------------------
Private Sub Button_Click()

'DoCmd.OpenReport "レポート名", PrintKbn

'↑を↓に変更

  PrintReport "レポート名", PrintKbn
 
End Sub
--------------------------------------------------------------------

これでデータベースにプリンター名や印刷設定を登録し、PrintReport内でセットすれば、ユーザー毎に印刷するプリンターを切り替えれる。

プログラムのリリース時もACCESSごと上書きで大丈夫!

用紙サイズ・給紙方法がなかったり文字列で指定したい場合は↓
用意されていない用紙サイズ・給紙方法を文字列で取得

0 件のコメント:

コメントを投稿