ページごとに1から連番をふる

 レポートのテキストボックスには集計実行オプションがあり、コントロールソースを「=1」とすればグループごとに、あるいはレポート全体でレコードに連番をふることができます。しかし集計実行オプションにはページごとに集計する機能がないためページごとに連番をふるとなるとちょっと厄介で、通常はVBAで処理します。
 ここでは実験的にVBAを使わず連番をふる方法を示します。ただし設定がやや面倒なため実用性はいまひとつで、素直にVBAに頼ったほうが簡単かと思われます。

 右のテーブルをレコードソースとするものとします。


 レポートデザインでまずグループ化を設定します。テーブルにはグループ化の対象となりそうな列(フィールド)はありませんが、ここではフィールド名ではなく「式」を選択します。


 「"ダミー"」と入力しOKをクリックします。文字はなんでもいいですが、単に文字のみ入力するとプレビューを開くたびにパラメータの入力を求められますので、ダブルクオーテーションでくくります。


 本題とは関係ありませんが一応並べ替えの指定しておきます。
 また、詳細セクションとの区別のためグループヘッダーには色をつけています。


 さて、グループヘッダーのオプションを開き、「セクション繰り返し」の値を「はい」とします。


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

○その1(グループヘッダー内)
名前:ページ初連番
コントロールソース:=[グループ内連番]
集計実行:しない

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

○その3(詳細セクション内)
名前:ページ内連番
コントロールソース:[グループ内連番]-[ページ初連番]+1
集計実行:しない


 印刷プレビューです。「ページ内連番」がページごとの連番を表示しています。



 このページでは印刷時拡張が効いてレコード数が他のページと違っていますが…


 次のページでも狂いなくページごとの連番がふられているのがわかります。


 さて、上記のやり方ではグループヘッダーのセクション繰り返しを有効にすることにより毎ページに表示させ、そこにページの最初のグループ内連番を保持するコントロールを置き、詳細セクションから参照するという手法をとっています。しかし、ページヘッダーを用いてもうまくいきません。ページヘッダーにコントロールを置いてもページの最初のグループ内連番を表示するものの、詳細セクションからの参照がうまくいかないからです(ページ内連番は常に1と表示されてしまいます)。
 なお、上記の方法により、ページの最初のレコード(とそうでないレコード)が識別できることがわかります。