トップへ(mam-mam.net/)

レポートの用紙サイズを設定するには

検索:

「レポートの用紙サイズを設定するには」

Accessではデフォルトプリンターが変更したりすると、
デフォルト用紙サイズ(通常はA4)に戻ります。
VBAから用紙サイズを設定するにはどうすればよいでしょうか。

回答

PrtDevModeプロパティを使います。

ソース

詳しくはPrtDevModeでヘルプを検索すると、使用例も出ます。

Rem PrtDevMode構造体の定義
Type type_DEVMODE
    dmDeviceName As String * 16
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * 16
    dmPad As Long
    dmBits As Long
    dmPW As Long
    dmPH As Long
    dmDFI As Long
    dmDFr As Long
End Type



'rptNameに指定したレポートの用紙設定をA5横に設定する関数
Function SwitchOrient(rptName As String) As Boolean
    Dim DevString As str_DEVMODE
    Dim DM As type_DEVMODE
    Dim DevModeExtra As String
    Dim rpt As Report
    

    DoCmd.SetWarnings False

    ' レポートをデザイン ビューで開きます。
    DoCmd.OpenReport rptName, acDesign
    ' レポートを非表示に設定します。
    Reports(rptName).Visible = False
    Set rpt = Reports(rptName)
    ' レポートの再表示機能を切ります。
    rpt.Painting = False
    
    If Not IsNull(rpt.PrtDevMode) Then
        DevModeExtra = rpt.PrtDevMode
        DevString.RGB = DevModeExtra
        LSet DM = DevString
    ' フィールドを初期化します
        DM.dmFields = DM.dmFields Or &H1 Or &H2 Or &H200 Or 4 Or 8 Or &H10000
        DM.dmOrientation = 2   '横
        DM.dmPaperSize = 11    'A5
        DM.dmDefaultSource = 7 '自動給紙トレー
        DM.dmPaperLength = 148
        DM.dmPaperWidth = 210
        DM.dmFormName = "A5"

        LSet DevString = DM                 ' プロパティを更新します
        Mid$(DevModeExtra, 1, 94) = DevString.RGB
        rpt.PrtDevMode = DevModeExtra
     End If

    'レポートの再表示機能をONにします
    rpt.Painting = True
    'レポートを表示します
    Reports(rptName).Visible = True
    'レポートを保存して閉じます
    DoCmd.Close acReport, rptName, acSaveYes
    DoCmd.SetWarnings True

    SwitchOrient = True
End Function