見出し画像

【ACCESS VBA】レポート印刷で10件ごとに区切りたい

商品リストや社員リストなどを一覧で印刷する際
10件ごとに区切って見やすくしたい
ということがあります
改ページや空白行をいれて区切ったり
罫線をいれて見やすくしたい
その方法を詳しく書いていきます

まずは動画をごらんください 2分23秒 音はいれてません

10件ごとで改ページ

まずは10件ごとに改ページする方法です
実際のレポートはこのようになります

1ページ目
2ページ目

このように社員マスタを印刷するレポートが
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件ごとに空白行を挿入

1ページ目
2ページ目

このように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番目の引数には 直線のを指定します

まとめ

件数が多いリストを印刷する際
一定数で改ページしたり 空白行をいれたり 罫線をひくことで
とても見やすい資料になります

次は レポートで特定のレコードにしるしをつける方法や
製本するときに便利な ページ番号の印字位置を変える方法を
記事にしていきます

いいなと思ったら応援しよう!