| Access Tips by pPoy |
| Report | レポートのページフッターへグループ毎の頁番号設定 New (ADO) (Ac2000,Ac2002) |
Access でレポートを印刷する時、ページ番号は Page/Pages 形式で振るのが一般的です。 ところが、グループ毎にページ番号を振りたいときがあります。これは Access の標準の機能にはありません。 以下は、グループ毎のページ番号を、ADO を使ってページフッターに表示する方法です。 | |
|---|---|---|---|
|
≪準備≫ この例では、Access 2002 に付属しているサンプルデータベースの Northwind.mdb 内の 「商品」 テーブルを レポートのデータソースとして使用しています。 ただし、Northwind.mdb の 「商品」 テーブルは、それ自身で完結したテーブルではなく、 別のテーブルとリンクしています。 商品テーブルに表示された情報をそのまま単独で使用するために、一旦 「商品」 テーブルを Excel ファイルとして出力してから、これをインポートして使用しています。 ただし通常のエクスポートでは、「商品区分」 等は名称ではなくコードとなってしまいますので、 以下の方法で出力します。
|
|
≪1.≫ レポートでグループ化するフィールド名を、「商品区分」 とします。 このグループ別ページ番号格納用の、テーブルを新規に作成します。
|
|
≪2.≫ レポートを一覧表形式で作成します。
|
|
≪3.≫ 次に、グループフッターの設定をします。 「商品区分フッター」 のプロパティを表示し、「改ページ」 を 「カレントセクションの後」 に変更します。
|
|
≪4.≫ レポートにコードを挿入します。 VBE 画面の宣言セクションに、以下のコードを貼り付けてください。 Option Compare Database Option Explicit 'ADOを使ってグループ毎にページ番号を振る '2006/12/09 pPoy Dim cnn As New ADODB.Connection Dim GrPages As New ADODB.Recordset |
|
≪5.≫ 続けて、新規プロシージャを追加します。 以下のコードを宣言セクションの下に貼り付けてください。
Function GetGrPages()
'頁番号表示用関数
'グループ化対象は、「商品区分」なので注意! 2006/12/09 pPoy
GrPages.Seek Me![商品区分], adSeekFirstEQ
If GrPages.EOF = False Then
GetGrPages = Me.Page & "/" & GrPages![頁番号]
End If
End Function
|
|
≪6.≫ レポートの 「開く時」 イベントに下記のイベントプロシージャを作成してください。
Private Sub Report_Open(Cancel As Integer)
'予め古い頁数の情報を削除し、インデックスを設定
'グループ頁番号格納用テーブル名は、「T_Grp_Page」 2006/12/09
Set cnn = CurrentProject.Connection
cnn.Execute "DELETE * FROM [T_Grp_Page]"
Set GrPages = New ADODB.Recordset
GrPages.Open "T_Grp_Page", cnn, _
adOpenKeyset, adLockOptimistic, adCmdTableDirect
GrPages.Index = "PrimaryKey"
End Sub
|
|
≪7.≫ 「商品区分 ヘッダー」 セクションの 「フォーマット時」 イベントに下記のイベントプロシージャを作成してください。
Private Sub グループヘッダー0_Format(Cancel As Integer, _
FormatCount As Integer)
'ページ番号の初期化
'グループ化用の「商品区分」ヘッダーに設定
Me.Page = 1
End Sub
|
|
≪8.≫ 「ページ フッター」 セクションの 「フォーマット時」 イベントに下記のイベントプロシージャを作成してください。
Private Sub ページフッターセクション_Format(Cancel As Integer, _
FormatCount As Integer)
'頁番号格納用テーブルに、グループ毎の頁数を入力
'グループ化フィールド名は、「商品区分」なので注意 2006/12/09
GrPages.Seek Me![商品区分], adSeekFirstEQ
If GrPages.EOF Then
GrPages.AddNew
GrPages![商品区分] = Me![商品区分]
GrPages![頁番号] = Me.Page
GrPages.Update
Else
If GrPages![頁番号] < Me.Page Then
GrPages![頁番号] = Me.Page
GrPages.Update
End If
End If
End Sub
|
|
≪9.≫ 「ページ フッター」 セクションに下記の2つのテキストボックスを作成してください。
|
|
≪10.≫ 最後に 「レポート フッター」 セクションは高さを 0 にして、表示しないようにします。 (これがあると、最後のページ数が余分に設定される為) 以下が出来上がったデザイン画面です。
|
|
≪11.≫ 全ての設定を保存してからプレビューします。 無事に頁番号が振られています。(ちょっと見にくいですが商品名の下にあります)
|
|
≪12.≫ ページ番号管理用テーブル 「T_Grp_Page」 の中身は 以下のようになっています。 ![]() これは出力例です。 中身はページ数やグループの種類によって変わります。 |
≪注意≫
|
Copyright(C) pPoy 2006