No117705.レポート名を自動的に変更したい
| タイトル | : レポート名を自動的に変更したい |
| 記事No | : 117705 |
| 投稿日 | : 2008/01/28(Mon) 10:26 |
| 投稿者 | : taka |
OS:XP Access Version:2000 教えてください。 説明下手なので、上手く伝わらなかったらすみません。
現在商品レポートを作成しております。 商品ごとに内容が違う為、レポートが50以上あります。 商品名のテーブルを作成し、フォームのコンボボックスを利用して 該当するレポートを印刷するよう作成しました。
複数のPC・プリンタを利用している為、 PrtMip・PrtDevmode・PrtDevnemeを利用しようと思い レポートごとにVBAを作成してみましたが、 プロシージャが多くなってしまい、探すのに手間がかかってしまいました。
あらかじめ商品名のテーブルにレポート名を入力しておき 商品名を選択しただけで、レポート名も反映させるようにするには どの様にすればよろしいでしょうか。
Option Compare Database Option Explicit
Private Type str_DEVMODE RGB As String * 94 End Type
Private Type str_PrtMip strRGB As String * 28 End Type
Private Type str_DEVNAME RGB As String * 256 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
Private Type type_PrtMip intLeftMargin As Long intTopMargin As Long intRightMargin As Long intBotMargin As Long End Type
Private Type type_DEVNAME lngDriverOffset As Integer lngDeviceOffset As Integer lngOutputOffset As Integer lngDefault As Integer End Type
Private Sub 印刷ボタン_Click() On Error GoTo 印刷_Err
If Me.品名 = "商品名1" Then Call 印刷1
ElseIf Me.品名 = "商品名2" Then Call 印刷2 ・ ・ ・ Else MsgBox "品名を選択してください。", vbOKOnly + vbQuestion
End If
印刷_Exit: Exit Sub
印刷_Err: Resume 印刷_Exit
End Sub
Private Sub 印刷1()
Const DM_ORIENTATION = &H1
Dim rpt As Report Dim DEVSTRING As str_DEVMODE Dim Dm As type_DEVMODE Dim strDevModeExtra As String Dim PrtMipString As str_PrtMip Dim PM As type_PrtMip Dim DevNameStr As str_DEVNAME Dim DVN As type_DEVNAME Dim strDevNameExtra As String Dim strDriver As String Dim strDevice As String Dim strPortName As String Dim strTemp As String
' デザイン ビューでレポートを開きます。 Application.Echo False DoCmd.OpenReport "レポート名1", acDesign ↑このレポート名と下の3箇所のレポート名を自動的に変更したいのです。
'レポートの印刷設定をします。 Set rpt = Reports("レポート名1")
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode DEVSTRING.RGB = strDevModeExtra LSet Dm = DEVSTRING PrtMipString.strRGB = rpt.PrtMip LSet PM = PrtMipString
' 初期化します。 With Dm '用紙設定 .lngFields = Dm.lngFields Or DM_ORIENTATION .intPaperSize = 11 '用紙サイズ A4:9 A5:11 .intOrientation = 2 '用紙方向 縦:1 横:2 .strDeviceName = "デバイス名" 'デバイス名を指定 End With
With PM '余白設定:単位ミリ .intLeftMargin = (5.04 / 10) * 567 '左余白 .intTopMargin = (5.04 / 10) * 567 '上余白 .intRightMargin = (5.04 / 10) * 567 '右余白 .intBotMargin = (5.04 / 10) * 567 '下余白 End With
With DVN 'プリンタ設定 .lngDriverOffset = 8 'ドライバー名の開始位置を指定 .lngDeviceOffset = 17 'デバイス名の開始位置を指定 .lngOutputOffset = 26 'ポート名の開始位置を指定 .lngDefault = 0 '標準プリンタ指定 0:その他 1:標準 End With
strDriver = "ドライバー名" 'ドライバーを指定 strDevice = "デバイス名" 'デバイス名を指定 strPortName = "デバイスポート" 'デバイスのポートを指定 strTemp = strDriver & Chr(0) & strDevice & Chr(0) & strPortName & Chr(0)
'プロパティの更新を行います。 LSet DEVSTRING = Dm LSet PrtMipString = PM Mid(strDevModeExtra, 1, 94) = DEVSTRING.RGB rpt.PrtMip = PrtMipString.strRGB rpt.PrtDevMode = strDevModeExtra LSet DevNameStr = DVN strDevNameExtra = DevNameStr.RGB strDevNameExtra = LeftB(strDevNameExtra, 8) & StrConv(strTemp, vbFromUnicode) '1バイト文字列で格納します rpt.PrtDevNames = strDevNameExtra
End If
' デザインビューを閉じます。 DoCmd.Close acReport, "レポート1", acSaveYes Application.Echo True
'印刷します。 DoCmd.OpenReport "レポート1", acNormal
End Sub
Private Sub 印刷2()
Const DM_ORIENTATION = &H1 ・ ・ ・
|
| タイトル | : Re: レポート名を自動的に変更したい |
| 記事No | : 117734 |
| 投稿日 | : 2008/01/28(Mon) 14:55 |
| 投稿者 | : SKm |
こんにちは
たとえば 標準モジュールに 「Public ReportName As Variant」 と変数を格納できるように記述を追加し 印刷のCall前に下記のようにレポート名を指定する
フォームに戻り印刷ボタンのクリック時イベントの 適当なところに
'呼び出したいレポート名を先ほどの変数に入れる '直接指定する ReportName = "レポート01"
'またはコントロールの値(Me.品名 や Me.品名.column(1)など) '例えばDlookupで参照、値を入れる ReportName = Dlookup("レポート名","商品テーブル","品名='" & Me.品名 & "'")
'そのあとに印刷処理呼び出し Call 印刷1
> Private Sub 印刷1() > > Const DM_ORIENTATION = &H1 > > Dim rpt As Report > Dim DEVSTRING As str_DEVMODE > Dim Dm As type_DEVMODE > Dim strDevModeExtra As String > Dim PrtMipString As str_PrtMip > Dim PM As type_PrtMip > Dim DevNameStr As str_DEVNAME > Dim DVN As type_DEVNAME > Dim strDevNameExtra As String > Dim strDriver As String > Dim strDevice As String > Dim strPortName As String > Dim strTemp As String > > ' デザイン ビューでレポートを開きます。 > Application.Echo False > DoCmd.OpenReport "レポート名1", acDesign
’ここを下記のように変更 DoCmd.OpenReport ReportName, acDesign > > 'レポートの印刷設定をします。 > Set rpt = Reports("レポート名1")
’同じように変更 Set rpt = Reports(ReportName)
他も同様に変更する みたいなカンジで指定が出来ます
|
| タイトル | : Re: レポート名を自動的に変更したい |
| 記事No | : 118045 |
| 投稿日 | : 2008/02/01(Fri) 21:56 |
| 投稿者 | : taka |
SKm様 ご連絡が遅くなりまして申し訳ございません。
おかげできちんと出来ました。!ありがとうございます。
|
このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

|