Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

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 が運営しています


 

ページの先頭へ 前ページへ戻る