パソコンの小技・備忘録


トップページ > 小技一覧(Access) > Accessのレポートで、グループ単位のページ数を表示したい。

Accessのレポートで、グループ単位のページ数を表示したい。

Accessのレポート機能は、集計した上で印刷できますので、WordやExcelより便利に使える場合も多くあります。

そのレポート機能には、ページ数を表示する機能はあるのですが、これがグループ単位での改ページ等を行う際にも、レポート全体のページ数を表示する機能しかありません。

これを実現するためには、少し手間ですが、Visual Basicで、標準のページカウントを書き換えてあげる必要があります。

【前提知識】
Accessのレポートでは、コントロールソースに「=[Pages]」が指定されたテキストボックスが配置された場合には、一度、ページ全体をスキャン(フォーマット扱いになりますので、フォーマットのイベントが発生します。)し、ページ数を確認した上で、印刷用のフォーマットを実行します。

この最初のスキャン(1回目のフォーマット)で、グループごとのページ数を格納し、2回目のフォーマットでページ数を表示します。

準備として、レポートのページヘッダーに、2つのコントロールを追加します。

・テキストボックス「ページカウント」
コントロールソースに「=Pages」を設定
可視に「いいえ」を設定

・テキストボックス「ページ表示」
見た目を整えるだけで、コントロールソース等の設定は不要です。

コントロールを配置したら、Visual Basic Editorを起動し、該当レポートのコードに下記の記述を追加します。

Option Explicit

'グループごとのページ数を格納するための変数を定義
Dim intGroupPageNum() As Integer

'グループ数をカウントする変数を定義
Dim intGroupCnt As Integer

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
  '念のため、変数を初期化します。
  intGroupCnt = 0
End Sub

Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer)

  'グループフッターのフォーマットは、1グループあたり1回発生
  'しますので、そのタイミングで、グループのカウントを増やします。
  If FormatCount = 1 Then

    '1回目のフォーマット時は、Pagesが0となっていますので、
    'その時だけ、ページ数を配列に格納します。
    If Pages = 0 Then
      ReDim Preserve intGroupPageNum(intGroupCnt)
      intGroupPageNum(intGroupCnt) = Page
    End If

    'グループのカウント数を増やします。
    intGroupCnt = intGroupCnt + 1
    
    'グループが切り替わるので、Pageをリセットします。
    Page = 0

  End If

End Sub

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

  '2回目のフォーマット時には、Pagesに数値が入っており、
  '0より大きいので、その時に、ページ表示を実行します。
  If Pages > 0 Then
    'ページ表示という名称のテキストボックスに値を表示します。
    Me.ページ表示 = Page & "/" & intGroupPageNum(intGroupCnt)
  End If

End Sub

以上の記述を行えば、各セクションのイベントに登録されると思います。

※念のため、各セクションのプロパティから、フォーマットイベントに「[イベント プロシージャ]」が設定されていることを確認しましょう。

トップページに戻る

パソコンの小技・備忘録トップページ(http://pckowaza.web.fc2.com/)を表示

※更新履歴などを掲載していますので、お気に入りはぜひトップページでお願いします!

サイト内検索

 Googleでサイト内検索

小技カテゴリー

カウンタ

メール送信

 ご意見・相互リンク募集中!
意見・相互リンクメールを送信!
inserted by FC2 system