Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7831 / 9994 ←次へ | 前へ→

【5346】PrtDevMode
質問  DOM  - 05/6/9(木) 17:55 -

引用なし
パスワード
   こんにちは

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にも引き継がれるようにするには、どのようにコードを書けばいいの
でしょうか?分かりづらいコードで申し訳ありませんが、
どうかよろしくお願いします。

881 hits

【5346】PrtDevMode DOM 05/6/9(木) 17:55 質問

7831 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078242
(SS)C-BOARD v3.8 is Free