複数のレポートを連続印刷する。
こちらのAccessで作成したフォームサンプルは、コンボボックスに地域番号を入力して、「都道府県(地域別)」ボタンをクリックすると、その地域の都道府県を載せたレポートが表示されるようになっています。
都道府県のデータが入っているテーブルには、47都道府県すべてのデータが入っていますが、「都道府県(地域別)」ボタンのクリック時にイベントプロシージャを記述することで、指定した地域のみの都道府県データをレポートに表示させるようにしています。ここでは、「1」から「10」までの地域番号をつけた、10の地域に分けており、こちらはその中の地域番号「7」の「近畿地方」のデータを表示したものです。このイベントプロシージャについては、「条件を指定して、レポートを開く。」のページに載せています。
指定した地域の都道府県データを印刷するには、このプレビューから印刷できますが、今回は、10ある地域を1ページに1地域という形で、全ての地域を1クリックで、連続して印刷できるように設定していきます。
では、このフォームにコマンドボタンをひとつ追加します。プロパティシートの「書式」タブの「標題」を「印字(全地域)」としています。
このコマンドボタンのクリック時イベントに次のコードを記述します。
Private Sub コマンド0_Click()
Dim tID As Integer
Dim dCT As Integer
Dim msg As String
dim ttl as String
msg = "都道府県(地域別)をすべて印刷します。"
ttl = "地域別都道府県印刷"
If MsgBox(msg, vbOKCancel, ttl) = vbOK Then
For tID = 1 To 10
dCT = dCount("都道府県", "Q_都道府県", "地域ID =" & tID)
If dCT = 0 Then
Else
DoCmd.OpenReport "R_都道府県", , , "地域ID=" & tID
End If
Next
Else
Exit Sub
End If
End Sub
まず、最初に変数を4つ宣言しています。それぞれ、「tID」は、地域IDを格納する変数、「dCT」は、地域IDごとのレコードの件数を格納する変数、「msg」は、メッセージボックスに表示する文章を格納する変数、「ttl」は、メッセージボックスのタイトルを格納する変数です。
Dim tID As Integer
Dim dCT As Integer
Dim msg As String
dim ttl as String
次に、変数「msg」と「ttl」にそれぞれ、メッセージボックスに表示する文章とタイトルを代入しています。
msg = "都道府県(地域別)をすべて印刷します。"
ttl = "地域別都道府県印刷"
次に、「都道府県(地域別)をすべて印刷します。」という、メッセージボックスを表示させ、「OK」ボタンが押されたときに、印刷し、それ以外のときは、プロシージャを抜けるというコードを「If~Elseステートメント」で記述します。
If MsgBox(msg, vbOKCancel, ttl) = vbOK Then
'印刷する指示を出すコード'
Else
Exit Sub
End If
印刷する指示を出すコードを、「For~Nextステートメント」を使って、地域IDが「1」~「10」のときまで、繰り返し処理を実行します。まず、「DCount関数」で、該当する地域IDのレコード数を、変数「dCT」に入れます。
For tID = 1 To 10
dCT = dCount("都道府県", "Q_都道府県", "地域ID =" & tID)
Next
そして、該当する地域IDのレコード数が「0」の時は、なにもせず、それ以外の時は、該当する地域IDの都道府県を載せたレポートを印刷します。
If dCT = 0 Then
Else
DoCmd.OpenReport "R_都道府県", , , "地域ID=" & tID
End If
あらかじめ、レポートの「ページ設定」から、印刷するプリンタを選択しておきます。これで、「印字(全地域)」ボタンをクリックすると、「地域ID」「1」~「10」までのレポートを順に印刷していくことができます。
カテゴリー:VBA
コメントフィード
トラックバックURL : http://gyoumuka.work/wp-trackback.php?p=2333