今回は区分マスタリストのメインと言うべき印刷処理について説明します。
印刷処理を共通で使い処理させてます。
insatu_sentaku(1:プレビュー、2:印刷)で使い分けをしてます。
-------------------------------------------------------------------
Function 印刷処理(insatu_sentaku As Integer) As Integer
'insatu_sentaku(1:プレビュー、2:印刷)
t_RecordSource = "rp_sp_区分マスタリスト"
On Error GoTo Err_印刷処理
Dim stDocName As String
stDocName = "r_区分マスタリスト"
If insatu_sentaku = 1 Then
'プレビュー
DoCmd.OpenReport stDocName, acPreview
DoCmd.RunCommand 245
Else
'印刷
Call prtReport(stDocName, cnsA4, cns縦, 2)
End If
Forms(cFormName_M)![印刷年].SetFocus
Exit_印刷処理:
Exit Function
Err_印刷処理:
If Err = 2501 Then
DoCmd.Close acReport, stDocName, acSaveNo
Application.Echo True
Else
MsgBox "エラーナンバー " & Err.Number & _
vbCrLf & _
Err.Description, vbCritical, "エラー"
End If
Resume Exit_印刷処理
End Function
-------------------------------------------------------------------
1.プレビューについて
1−1.DoCmd.OpenReport stDocName, acPreview
DoCmdとはVBAからAccessのマクロのアクションを実行します。
OpenReportでレポートを開きます。
"rp_sp_区分マスタリスト"をstDocNameに送ります。
acPreviewは組み込み関数で印刷プレビューで開く。
1−2.DoCmd.RunCommand 245
245とは何なのか?
ウィンドに合わせるという意味です。
よくわからない?
要するに、自動的にウィンドの大きさを把握してくれて表示
してくれるということなのです。
普通に何もこんな処理をしてないと、右上が表示されて
なんかカッコ悪く表示されるわけです。
バーンと画面の中央に表示した方が見やすいし使いやすい。
便利なものは使わないと損。
それと使う人のことも考えて作ることも大切。
2.印刷について
プリンターが変わったらレポートを修正したということありませんか?
こんなとき、モジュールを作っておくと便利。
用紙は何?、印刷の向きは?
これを設定して印刷させるわけです。
Call prtReport(stDocName, cnsA4, cns縦, 2)
今回は、"rp_sp_区分マスタリスト"でA4用紙で縦向きに印刷
させてます。
"2"のいみですが、印刷時モードのときプレビューを表示させない
処理です。
ご丁寧に印刷をするとプレビューを描画してくれるのです。
でも、印刷しているのにプレビューを描画させても意味がありません。
だから、表示させないようにしています。
3、エラー処理
印刷するデータがないときに、プレビューを描画させたり
白紙の紙が印刷されたりするのは、よくありません。
そこでこれらを制御します。
印刷データなしのエラーは"2501"と決まっています。
これで制御できます。
印刷されるデータはありませんとか。コンボボックスで知らせれば
無駄な処理をさせずにすみます。
この処理は何をしているのか?
考えてみてください!
DoCmd.Close acReport, stDocName, acSaveNo
Application.Echo True
-------------------------------------------------------------------
印刷モジュール
Sub prtReport(rptName As String, Psize As Integer, _
Porient As Integer, syori As Integer)
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
If syori = 2 Then
Application.Echo False
End If
DoCmd.OpenReport rptName, acViewDesign
Set rpt = Reports(rptName)
If Not IsNull(rpt.PrtDevMode) Then
strDevModeExtra = rpt.PrtDevMode
DevString.RGB = strDevModeExtra
LSet DM = DevString
DM.intPaperSize = Psize
DM.intOrientation = Porient
DM.intCopies = Pcopy
LSet DevString = DM
Mid(strDevModeExtra, 1, 94) = DevString.RGB
rpt.PrtDevMode = strDevModeExtra
Else
MsgBox "用紙設定が出来ません!"
End If
If syori = 1 Then
Else
DoCmd.OpenReport rptName, acViewNormal
DoCmd.Close acReport, rptName, acSaveNo
End If
If syori = 2 Then
Application.Echo True
End If
End Sub
-------------------------------------------------------------------
用紙サイズと向き
'用紙サイズ
Global Const cnsA3 = 8
Global Const cnsA4 = 9
Global Const cnsA5 = 11
Global Const cnsB4 = 12
Global Const cnsB5 = 13
'用紙方向
Global Const cns縦 = 1
Global Const cns横 = 2
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
最短のシステム構築基礎は、経験者から学び取ることです。
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|