|
こんにちは
PrtDevModeで印刷前にレポートにプリンタの設定をしています。
2つのレポートがあり、最初に印刷されるときに印刷ダイアログを呼び、
指定した枚数分ずつ印刷したいのですが、
PrtDevModeの設定がレポート1にしか効きません。
(PrtDevModeで印刷ダイアログで設定した内容を2枚目以降の印刷にも
引き継がせようとしています。)
設定して引き継がせようとしている項目は、プリンタ名と給紙装置です。
以下コードです。(長くてごめんなさい。
Private Sub 印刷_Click()
Private Type str_DEVMODE
RGB As String * 94
End Type
Private Type type_DEVMODE
strDeviceName As String * 16
intSpecVersion As Integer
intDriverVersion As Integer
intSize As Integer
intDriverExtra As Integer
lngFields As Long
intOrientation As Integer
intPaperSize As Integer
intPaperLength As Integer
intPaperWidth As Integer
intScale As Integer
intCopies As Integer
intDefaultSource As Integer
intPrintQuality As Integer
intColor As Integer
intDuplex As Integer
intResolution As Integer
intTTOption As Integer
intCollate As Integer
strFormName As String * 16
lngPad As Long
lngBits As Long
lngPW As Long
lngPH As Long
lngDFI As Long
lngDFr As Long
End Type
Const DM_ORIENTATION = &H1
Dim insatusuu As Integer
Dim DevString As str_DEVMODE
Dim Dm As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
Dim DevString2 As str_DEVMODE
Dim Dm2 As type_DEVMODE
Dim strDevModeExtra2 As String
Dim rpt2 As Report
For i = 1 To insatusuu
If i = 1 Then
DoCmd.OpenReport "レポート1", acViewPreview, , "主キー'" & rs![主キー& "'"
DoCmd.RunCommand acCmdPrint
'*****************レポート設定"レポート1"*********************
DoCmd.OpenReport "レポート1", acDesign
Set rpt = Reports("レポート1")
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet Dm = DevString
Dm.lngFields = Dm.lngFields Or DM_ORIENTATION
Dm.strDeviceName = Dm.strDeviceName
Dm.intDefaultSource = Dm.intDefaultSource
'プロパティの更新を行います。
LSet DevString = Dm
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
End If
DoCmd.Close acReport, "レポート1", acSaveYes
'******************レポート設定"レポート2"********************
DoCmd.OpenReport "レポート2", acDesign
Set rpt2 = Reports("レポート2")
If Not IsNull(rpt2.PrtDevMode) Then
strDevModeExtra2 = rpt2.PrtDevMode
DevString2.RGB = strDevModeExtra2
LSet Dm2 = DevString2
Dm2.lngFields = Dm2.lngFields Or DM_ORIENTATION
Dm2.strDeviceName = Dm.strDeviceName
Dm2.intDefaultSource = Dm.intDefaultSource
LSet DevString2 = Dm2
Mid(strDevModeExtra2, 1, 94) = DevString2.RGB
rpt2.PrtDevMode = strDevModeExtra2
End If
DoCmd.Close acReport, "レポート2", acSaveYes
'************************************************************
Else
DoCmd.OpenReport "レポート1", , , "主キー='" & rs![主キー] & "'"
End If
DoCmd.OpenReport "レポート2", , , "主キー='" & rs![主キー] & "'"
Next i
End Sub
レポート1,2それぞれ2枚ずつ印刷しようとしたときに、レポート1だけ
ダイアログで設定した内容(プリンタ,給紙装置)を引き継いで、印刷されます。
レポート2にも引き継がれるようにするには、どのようにコードを書けばいいの
でしょうか?分かりづらいコードで申し訳ありませんが、
どうかよろしくお願いします。
|
|