【AccessVBA】(仕訳システム)=帳票印刷=月ごとに集計を出し、ヘッダーに印字する

今回は、年途中月決算の会社を想定し、勘定科目(グループ)毎、月毎に改ページして、月毎の集計値をページのヘッダーに印字するケースを考えます。
楽天銀行の補助元帳のレポートを作ります。

1)レポートのソースは[q_楽天銀行(クエリ)]

SELECT tb仕訳帳.貸方 AS グループ,
tb仕訳帳.年,
tb仕訳帳.月,
tb仕訳帳.日,
tb仕訳帳.借方 AS 相手勘定科目,
tb仕訳帳.摘要,
tb仕訳帳.仕訳番号,
“0” AS 借方,
tb仕訳帳.貸方金額 AS 貸方
FROM tb仕訳帳
WHERE tb仕訳帳.貸方 LIKE ‘楽天銀行’UNION ALLSELECT tb仕訳帳.借方 AS グループ,
tb仕訳帳.年,
tb仕訳帳.月,
tb仕訳帳.日,
tb仕訳帳.貸方 AS 相手勘定科目,
tb仕訳帳.摘要,
tb仕訳帳.仕訳番号,
tb仕訳帳.借方金額 AS 借方,
“0” AS 貸方
FROM tb仕訳帳
WHERE tb仕訳帳.借方 LIKE ‘楽天銀行’

ORDER BY 年, 月, 日;

※レコードは、

グループ 相手勘定科目 摘要 仕訳番号 借方 貸方

2)レポートのデザインビューで、

①グループ化、並べ替え、集計を設定

グループ化:グループ
└グループ化:年
└グループ化:月
└並べ替えキー:日

②ページヘッダーに集計値を印字するスペースをのぞいて、A4サイズのレポートの罫線を引きます。
さらにデータに空白部分があっても最後まで罫線を引くために[Me.MoveLayout = False]を設定します。

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
Me.MoveLayout = False
RowCnt = 0

End Sub

③レポート1ページに24行のデータの印字が可能なら、24データごとに改ページをするように設定をします。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

Zandaka = Zandaka + Me.txt金額1.Value – Me.txt金額2.Value
Me.txt残高.Value = Zandaka

RowCnt = RowCnt + 1
If RowCnt >= 24 Then ‘1ページ当たり24件
Me.詳細.ForceNewPage = 2 ‘カレントセクションの後で改ページ
Else
Me.詳細.ForceNewPage = 0 ‘カレントセクションの前で改ページ
End If

End Sub

④ヘッダー・フッターのプロパティを設定する

必ずグループ毎に改ページしたい場合は、グループヘッダ セクションの改ページ プロパティで設定します。
今回は、勘定科目ごと、月ごとに改ページしたいので、

■『月ヘッダー』の改ページプロパティ⇒[カレントセクションの前]
■『月フッター』の改ページプロパティ⇒[しない]
■『グループヘッダー』の改ページプロパティ⇒[しない]

⑤セクション繰り返し プロパティの設定

これはセクションの中でもグループヘッダーにしかないプロパティです。セクション繰り返しプロパティの規定値は「いいえ」です。
グループ毎に印刷したとき、ある1つのグループが2ページ以上になると2ページ以降では、月ヘッダー部分の余白がとられずに、ページTOPから、仕訳データの印字がされます。

ページTOPの余白部分を取るためには、
『月ヘッダー』のセクション繰り返しプロパティを[はい]にします。

■『月ヘッダー』のセクション繰り返しプロパティ⇒[はい]

※その他のイベントプロシージャ

————————————–
Option Compare Database
Option Explicit
Dim RowCnt As Long
Dim Zandaka As Long

————————————–
————————————–
Private Sub Report_Open(Cancel As Integer)
‘******************************
‘ レポートの並び順を設定
‘******************************
‘レポートの並び順を設定
Me.OrderBy = “日”
‘レポートの並べ替えを実行
Me.OrderByOn = True

End Sub

————————————–
————————————–
Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
‘******************************
‘   期首残高を設定
‘******************************
Me.MoveLayout = False
‘レコードセットを作成
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim Kisyu_Zandaka As Long

Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset

‘データを抽出して、レコードセットを作成
SQL = “SELECT tb期首残高.科目名, tb期首残高.期首残高 FROM tb期首残高 WHERE tb期首残高.科目名=’楽天銀行’;”
rs.Open SQL, cn, adOpenKeyset, adLockOptimistic
Kisyu_Zandaka = rs!期首残高

rs.Close: cn.Close
Set rs = Nothing: Set cn = Nothing

‘残高の初期値を設定
Zandaka = Kisyu_Zandaka

End Sub
————————————–

About

You may also like...

Your email will not be published. Name and Email fields are required