「レポートの用紙サイズを設定するには」
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