Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  ExcelへExcel  Etc.へEtc.  Word連携へWord

Report レポートのページフッターへグループ毎の頁番号設定 (DAO)(Ac97,Ac2000,Ac2002)
Access でレポートを印刷する時、ページ番号は Page/Pages 形式で振るのが一般的です。

ところが、グループ毎にページ番号を振りたいときがあります。
これは Access の標準の機能にはありません。

以下は、グループ毎のページ番号を、DAO を使ってページフッターに表示する方法です。
≪1.≫

レポートでグループ化するフィールド名を、[分類] とします。
このグループ別総ページ数格納用の新規テーブルを作成します。

分類別リスト

  •  新規テーブル名を、[分類別リスト]とします。 フィールドは2つ作成します。
  •  最初に、[分類]フィールドをテキスト型で作ります。
     これに[主キー]を設定してください。  サイズは分類名の収まる長さとします。
  •  次に、[頁番号]フィールドを、長整数型でつくります。  
 中味は空のまま、このテーブルを自mdb に保存してください。
≪2.≫

次に、レポートをデザイン画面で開きます。
この 「[分類] グループフッター」 の "改ページ" プロパティを  [カレント セクションの後]  に設定します。
≪3.≫

続けて、レポートにコードを挿入します。
VBE画面の宣言セクションに、以下のコードを貼り付けてください。
  Option Compare Database
  Option Explicit

  ' DAOを使ってグループ毎にページ番号を振る
  ' 2002/07/13 pPoy

  Dim DB As dao.Database
  Dim GrPages As dao.Recordset
≪4.≫

続けて、新規プロシージャを追加します。
以下のコードを宣言セクションの下に貼り付けてください。
  Function GetGrPages()
    ' 頁番号表示用関数
      GrPages.Seek "=", Me![分類]
      If Not GrPages.NoMatch Then
          GetGrPages = Me.Page & "/" & GrPages![頁番号]
      End If
  End Function
≪5.≫

レポートの "開く時" プロパティに下記のイベントプロシージャーを作成してください。
    Private Sub Report_Open(Cancel As Integer)
      '予め古い頁数の情報を削除し、インデックスを設定
        Set DB = CurrentDb()
      DB.Execute "DELETE * FROM [分類別リスト];"
      Set GrPages = DB.OpenRecordset("分類別リスト", dbOpenTable)
      GrPages.Index = "PrimaryKey"
    End Sub
≪6.≫

[分類 ヘッダー] セクションの "フォーマット時" プロパティに下記のイベントプロシージャを
作成してください。
  Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
    'ページ番号の初期化
      Me.Page = 1
  End Sub
≪7.≫

[ページ フッター] セクションの "フォーマット時" プロパティに下記のイベントプロシージャ
を作成してください。
    Private Sub ページフッター_Format(Cancel As Integer, FormatCount As Integer)
      '頁番号格納用テーブルに、グループ毎の頁数を入力
        GrPages.Seek "=", Me![分類]
        If Not GrPages.NoMatch Then
            If GrPages![頁番号] < Me.Page Then
                GrPages.Edit
                GrPages![頁番号] = Me.Page
                GrPages.Update
            End If
        Else
            GrPages.AddNew
            GrPages![分類] = Me![分類]
            GrPages![頁番号] = Me.Page
            GrPages.Update
        End If
          
    End Sub
≪8.≫

最後に、[ページ フッター] セクションに下記の2つのテキストボックスを作成してください。
  • テキストボックス 1 (ここに、グループ毎の頁数を表示します)
     コントロールソース: =GetGrPages()
  • テキストボックス 2 (コレは、非表示に設定します)
     コントロールソース: =Pages
これで、ページフッターには、
  分類  コード    品名
  ------------------------------------------
  飲物   
       1     100%オレンジ
       2     100%グレープ
       3     100%レモン

    〜〜〜〜〜〜〜〜〜〜〜

       11    コーヒーミルク
       12    美味しいお茶
  ------------------------------------------
  1/3

のように表示されます。
ここで、最初に作ったページ番号管理用テーブル 「分類別リスト」 の中身は
以下のようになっています。

分類別リスト
  これは出力例です。

  中身はページ数や分類の種類によって変わります。
≪注意≫

  • DAO を使用しますので、Access2000 及び AccessXP の場合は、
    DAO への参照設定 が必要です。

  • 予めレポートには [分類] で、グループ化を設定し、 「グループヘッダー」 と
    「グループフッター」 を表示してください。

  • これはページフッター以外では正しく動きません。

  • これは、以下のマイクロソフト技術情報を元に作成したものです。
    (より解り易く加工したつもりですが、それでも不明な点は本家?の方をどうぞ。)

    [AC97]レポートでグループ毎にPage/Pages形式のページ番号をつける方法

  • ADO 利用の場合は、こちら




この頁のTOPへTop

【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

Copyright(C) pPoy 2002