営業所マスタリストの作成、4回目です。
今回は、レポー内のVBAの説明です。
Accessでは、通常レポートの左端が画面に表示されます。
パーンと、中央に表示させましょう。
1クリックしなくてもできるんです。
とても見映えがよくなりますよ。
では、はじめましょう。
-------------------------------------------------------------------
Option Compare Database
Option Explicit に下記を記述してください。
Const cFormName_M = "営業所マスタリスト"
Const cReportName_M = "r_営業所マスタリスト"
'行カウンター
Dim line_count As Integer
-*-------*-------*-------*-------*-------*-------*-------*-------*-
1.Report_Openについて
'◎ポイント解説 1 について -----*-----*-----*-----
Reports(cReportName_M).RecordSource = t_RecordSource
'◎ポイント解説 2 について -----*-----*-----*-----
Win_Maximize
1-1.◎ポイント解説 1 について
前回、印刷処理()に記述しました。
t_RecordSource = "rp_sp_営業所マスタリスト"
のストアドプロシージャをどのようにして渡すのか?
"r_営業所マスタリスト"のレポートのRecordSourceに渡します。
1-2.◎ポイント解説 2 について
プレビュー表示を最大化する処理です。
そのモジュールが下記になります。
Sub Win_Maximize()
On Error GoTo Win_Maximize_Err
DoCmd.Maximize
Win_Maximize_Exit:
Exit Sub
Win_Maximize_Err:
MsgBox Error$
Resume Win_Maximize_Exit
End Sub
-*-------*-------*-------*-------*-------*-------*-------*-------*-
2.ページヘッダーセクション_Printについて
line_count = Int(0)
[印刷日付] = DateSerial(Forms(cFormName_M)![印刷年], _
Forms(cFormName_M)![印刷月], Forms(cFormName_M)![印刷日]) _
& " " & Forms(cFormName_M)![印刷時間]
If Forms(cFormName_M)![印刷順] = 1 Then
[repo印刷順] = "カナ名順"
Else
[repo印刷順] = "営業所コード順"
End If
行カウターのline_count をゼロにします。
-*-------*-------*-------*-------*-------*-------*-------*-------*-
3.詳細_Formatについて
'◎ポイント解説 3 について -----*-----*-----*-----
line_count = line_count + Int(1)
Call 明細行着色(cReportName_M, line_count, 0, 0, "")
3-1.◎ポイント解説 3 について
明細行のBackColorに着色をさせます。
ページヘッダーセクション_Printでline_countにゼロをいれています。
詳細_Formatでline_countに1ずつカウントアップします。
明細行着色のモジュールは、単に背景色を設定するためだけに
使用するのではありません。
納品書、請求書には線に色をつける処理もさせています。
色を濃くしたり薄くしたり。
ここでは、
Call 明細行着色(cReportName_M, line_count, 0, 0, "")
となっています。
ポイントは、line_countの数値により背景を換えているところです。
互い違いに白、薄い灰色にさせています。
そうすると、帳票がとても見やすくなりますし、見映えもよいです。
すこし、プロ級っぽいかも?
明細行着色は、 p_line_count Mod 2 で判断します。
Modは、2つの数値の除算を行い、その剰余を返します。
result = number1 Mod number2
余りが1なら、BackColorを白色にします。
余りが0なら、BackColorを薄い灰色にします。
p_line_countには、足しこまれた値が入りますが、2で割ると
必ず、0か1を返します。
それを利用します。
Modの演算子はよく使います。
覚えておくと、とても便利です。
明細行着色のモジュール
Sub 明細行着色(p_cReportName_M As String, p_line_count As
Integer, _
p_intSectionNumber As Integer, p_sw As Integer, p_iro
As String)
Dim iro_RGB As Long
If p_sw = 0 Then
iro_RGB = RGB(227, 227, 227) '薄い灰色
Else
If p_sw = 1 Then
Select Case p_iro
Case "青"
iro_RGB = RGB(0, 0, 255)
Case "緑"
iro_RGB = RGB(0, 255, 0)
Case "赤"
iro_RGB = RGB(255, 0, 0)
Case "黒"
iro_RGB = RGB(0, 0, 0)
Case "灰"
iro_RGB = RGB(192, 192, 192)
Case "茶"
iro_RGB = RGB(128, 0, 0)
Case "水"
iro_RGB = RGB(0, 255, 255)
Case Else
'黒
iro_RGB = RGB(0, 0, 0)
End Select
Else
If p_sw = 2 Then
Select Case p_iro
Case "青"
iro_RGB = RGB(232, 232, 255)
Case "緑"
iro_RGB = RGB(221, 255, 221)
Case "赤"
iro_RGB = RGB(255, 223, 223)
Case "黒"
iro_RGB = RGB(227, 227, 227)
Case "灰"
iro_RGB = RGB(227, 227, 227)
Case "茶"
iro_RGB = RGB(255, 223, 223)
Case "水"
iro_RGB = RGB(215, 255, 255)
Case Else
'黒
iro_RGB = RGB(227, 227, 227)
End Select
End If
End If
End If
If p_line_count Mod 2 Then
Reports(p_cReportName_M).Section(p_intSectionNumber).BackColor
= _
16777215 '白色
Else
Reports(p_cReportName_M).Section(p_intSectionNumber).BackColor
= _
iro_RGB '薄い灰色
End If
End Sub
-*-------*-------*-------*-------*-------*-------*-------*-------*-
4.Report_NoDataについて
MsgBox "印刷すべきデータがありません", vbExclamation, "印刷警告"
Cancel = True
Forms(cFormName_M)![印刷順].SetFocus
印刷するデータがない場合の処理です。
MsgBoxで"印刷すべきデータがありません"と確認させます。
"営業所マスタリスト"の[印刷順]にフォーカスを移動させます。
Cancel = True は何をしているか?
これがないとデータが1つもないのに印刷されます。
見出しと罫線のみの名称マスタリストが1枚プリンターから出てきます。
用紙がもったいない、もったいない。
データがないのなら、フォームに直接戻す処理をさせます。
印刷させない。
それが Cancel = True です。
何度も使う処理はモジュール化してどんどん使いましょう!
明細行着色のモジュールを自分なりに使いやすいように
工夫して見て下さい。
営業所マスタリストは、これで終了です。
こんなモジュールを作ったのですがというご意見は大歓迎です。
メールにてお送りください、みなさんに紹介します。
次回から第7コースがはじまります。
===================================================================
◆
実践テクニック、Accessで作るクラサバシステム ◆
編集・構成:高橋浩
提供・発行:ティウェア
http://www.1tware.com/index.html
Access2000+MSDE2000、Access2002+MSDE2000、Access2003+MSDE2000で
作る販売管理ソフト、クライアントサーバーシステムを構築
※当メールマガジンに掲載された記事を許可なく転載することを禁じます。
===================================================================
実践テクニック、Accessで作るクラサバシステム(隔週 火曜日発行中)
SEが10年以上の開発ノウハウを惜しみなく完全公開!
|