グループごとにページ番号をふる

 レポートにはページ番号を表示する機能があります(こちらを参照ください)が、レポート全体でのページ番号しか表示することができず、グループごとに1からページをふりなおすという機能はありません。通常はVBAで対応しますが、ここではコントロールの設定のみでなんとかしてみます。
 なお、残念ながら以下の方法ではグループごとの総ページ数(Pages)を表示することはできません;-_-)

f:id:accs2014:20161204122235p:plain:right:w300

 データソースとして右のようなクエリを用います。レポートにおいては「科目コード」によりグループ化し、それぞれ1ページからページを表示しようというわけです。


f:id:accs2014:20161204122233p:plain:right:w400

 レポートのデザインビューです。

ここで次の3つのテキストボックスを設置します。

○その1(詳細セクション内)
名前:グループ連番
コントロールソース:=1
集計実行:グループ全体

○その2(詳細セクション内) 
名前:グループ最初ページ番号
コントロールソース:=IIf([グループ連番]=1,[Page],0)
集計実行:グループ全体

○その3(ページフッター内)
名前:グループ別ページ番号
コントロールソース:[Page]-[グループ最初ページ番号]+1
集計実行:しない

 さらに、科目コードのグループフッターを設置し、高さを0以外の値(なるべく小さい値でOK)とし、さらに「改ページ」プロパティを「カレントセクションの前」とします(印刷プレビューで識別できるよう、色を付けています)。
 一見無用の設定ですが、こうしないとなぜか各グループの最後のページのページ番号が正確に表示されません。


f:id:accs2014:20161204122232p:plain:right:w400

 印刷プレビューです。
 最初のグループの最後のページです。ページ番号は4となっています。


f:id:accs2014:20161204122230p:plain:right:w400

 次のページ、2番目のグループの最初のページです。ページ番号が1に戻っているのがわかります。
 なお、グループフッターの設定の関係でグループヘッダーの上にちょっとだけ前のグループフッターが残りますので、グループフッターの高さは0に近い小さい値としておいた方がいいです。


 最後に解説ですが、テキストボックスのうち「グループ連番」は文字通りグループ内でのレコードの連番です。「グループ最初ページ番号」はレコード連番が1の時のみページ番号と同じ値(それ以外のときは0)となりますが、グループごとに集計されていますので、結果的に「グループの最初のレコードが存在するページ番号」を常に保持します。
 後は簡単な算数です。レポート全体でのページ番号(Page)からグループ最初ページ番号を差し引き、1を足せば、グループ内でのページ番号になるというわけです。