【ACCESS VBA】レポート印刷で10件ごとに区切りたい
商品リストや社員リストなどを一覧で印刷する際
10件ごとに区切って見やすくしたい
ということがあります
改ページや空白行をいれて区切ったり
罫線をいれて見やすくしたい
その方法を詳しく書いていきます
まずは動画をごらんください 2分23秒 音はいれてません
10件ごとで改ページ
まずは10件ごとに改ページする方法です
実際のレポートはこのようになります
このように社員マスタを印刷するレポートが
10件ごとに改ページされています
紙のサイズに合わせて 15件にも20件にも
自由に変更することができますので
実際の運用に合わせて設定してください
レポートの設定
レポートを作成します
レコードソースは社員マスタ
詳細セクションのレコードを表示するコントロールの上の部分に
レポートデザインタブのコントロールの中から
改ページコントロールを挿入します
コントロールの名前を「改ページ」とします
VBAコード
Option Compare Database
Option Explicit
Dim i As Long
Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
i = 0
Me.改ページ.Visible = False
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
i = i + 1
If i > 10 Then
Me.改ページ.Visible = True
Else
Me.改ページ.Visible = False
End If
End Sub
Dim i As Long
改ページ位置を取得するための変数を宣言しています
ページヘッダーセクションのフォーマット時処理
i = 0
変数 i に0を代入
Me.改ページ.Visible = False
改ページコントロールの表示をFalse に設定しています
詳細セクションのフォーマット時処理
i = i + 1
1件ごとに 変数 i を 1ずつ加算していきます
If i > 10 Then
If文で変数 i の値が 10 より大きいか判定します
Me.改ページ.Visible = True
10より大きい場合改ページします
Else
Me.改ページ.Visible = False
End If
10 以下の場合改ページしません
10 の部分を 15 や 20 にすることで
改ページするレコード件数を変えることができます
解説
レポートを印刷する場合
Format イベントで改ページコントロールに対して
Visible プロパティを使用し
任意の位置を指定して改ページが行われます
ここでは
レポートの詳細セクションのレコードを表示するテキストボックスよりも
上の部分に「改ページ」という名の
改ページコントロールが挿入されています
object. Visible
Visible プロパティは object に指定したオブジェクトが
表示されるかどうかを指定します
ここでは object に改ページコントロールを指定することで
改ページをするかどうかを指定しています
10件ごとに空白行を挿入
このように10件ごとに 空白行が挿入されています
レポートの設定
この場合 改ページコントロールは使用しません
普通の帳票レポートを作成します
VBAコード
Option Compare Database
Option Explicit
Dim i As Long
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
i = i + 1
If i Mod 11 = 0 Then
With Me
.NextRecord = False
.PrintSection = False
.MoveLayout = True
End With
i = 0
End If
End Sub
Dim i As Long
行を取得するための変数を宣言しています
詳細セクションの印刷時処理
i = i + 1
変数 i の値に 1 を加算しています
If i Mod 11 = 0 Then
10行ごとに処理をおこなうため Mod 演算子を使用します
10行ごとということは 10行+空白行で11行になるため
11で除算した余りで判定します
With Me
.NextRecord = False 次のレコードに進みません
.PrintSection = False セクションを印刷しません
.MoveLayout = True 次の印刷位置に移動します
End With
MoveLayout プロパティのみを True にして
指定した行数になると印刷せずに次の印刷位置に
移動させることで 空白行を作成しています
解説
レポートに指定した行ごとに 空白行をいれたいとき
Print イベントに NextRecord プロパティ PrintSection プロパティ
MoveLayout プロパティを使用して設定します
object. NextRecord / PrintSection / MoveLayout
いずれも object に Report オブジェクトをしてします
NextRecord プロパティは True を指定するとセクションを次のレコードに進めます
PrintSection プロパティは True を指定するとセクションを印刷します
MoveLayout プロパティは True を指定するとページ上の次の印刷位置に移動します
10件ごとに罫線を引く
VBAコード
Option Compare Database
Option Explicit
Dim i As Long
Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
i = 0
End Sub
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
Dim vL As Integer
Dim vR As Integer
Dim vT As Integer
Dim vB As Integer
vL = 0
vR = Me.Width
vT = Me.Height
vB = Me.Height
i = i + 1
If i Mod 10 = 0 Then
Line (vL, vT)-(vR, vB), RGB(255, 0, 0)
i = 0
End If
End Sub
Dim i As Long
レコード数を代入するための変数を宣言しています
ページヘッダーセクションのフォーマット時の処理
i = 0
レコード数をリセットしています
詳細セクションの印刷時の処理
Dim vL As Integer 左端の位置を代入する変数を宣言します
Dim vR As Integer 右端の位置を代入する変数を宣言します
Dim vT As Integer 上端の位置を代入する変数を宣言します
Dim vB As Integer 下端の位置を代入する変数を宣言します
vL = 0 左端の位置を「0」にします
vR = Me.Width 右端の位置を詳細セクションの幅にします
vT = Me.Height 上端の位置を印刷されるレコードの高さにします
vB = Me.Height 下端の位置を印刷されるレコードの高さにします
i = i + 1 レコード数に「1」を加算します
If i Mod 10 = 0 Then
10件ごとに処理をおこなうための判定をしています
Line (vL, vT)-(vR, vB), RGB(255, 0, 0)
赤い直線を指定した位置にひきます
i = 0
レコード数をリセットします
End If
If 文を閉じます
解説
レポートに直線をひくには Line メソッドを使用します
Width プロパティを使用してセクションの幅を
Height プロパティを使用してセクションの高さを取得して
直線を引く位置を取得しています
なお レコード数をカウントするための変数 i は
ページヘッダーセクションでリセットしていきます
こうすることでページの先頭から10件ごとに直線がひかれます
Line メソッド
object. Line ( Step( x1 , y1 ) - Step ( x2, y2 ), color )
Line メソッドは object に指定した Report オブジェクトの
Print イベントの発生時に
直線や長方形を描きます
1番目の引数に
「(始点の x 座標 , 始点の y 座標)-(終点の x 座標 , 終点の y 座標)」
の値を指定します
2番目の引数には 直線の色を指定します
まとめ
件数が多いリストを印刷する際
一定数で改ページしたり 空白行をいれたり 罫線をひくことで
とても見やすい資料になります
次は レポートで特定のレコードにしるしをつける方法や
製本するときに便利な ページ番号の印字位置を変える方法を
記事にしていきます