MS Access Tips/Sample and VBA and Blog customize etc...

ページヘッダーに、「先頭値~最終値」を表示する

顧客の一覧をレポートでコード順に出力するのですが、そのページに表示されている顧客のコードをページヘッダーに「○番~○番」というように表示したい。

RptPageHeaderFromTo.png

難易度:

ページヘッダーとページフッターにテキストボックスを配置して、コントロールソースを
=[仕入先コード]
というように設定すれば、ページヘッダーにページの先頭行のコード、ページフッターには最終行のコードが表示されます。

これをページヘッダーに両方とも表示させるとなると簡単にはいきません。ページ内でのイベントの発生順序は、ページヘッダー→詳細セクション(行数分)→ページフッターですので、ページフッターで最終行のコードを取得しても、ページヘッダーに表示するには手遅れです。VBAの助けを借りて、なんとかすることになります。方法としては2つの案が考えられます。

第一案 Dictionaryの利用

グループ毎に Page/Pages 形式のページ数を表示する - hatena chips
の方法の応用です。 コントロールソースが =[Pages] のテキストボックスを配置しておくと、 ページ数取得の為に予行演習のフォーマットが最終レコードまで発生した後に、最初から 本番のフォーマットが始まります。

この予行演習のフォーマット時に配列かディクショナリに先頭と最後のレコード番号を 格納しておき、本番のフォーマット時で取り出して代入します。

ページヘッダーにテキストボックスを配置して、下記のように設定します。

プロパティ 設定値 
コントロールソース =[仕入先コード] & "番 ~"
文字配置

その右にテキストボックスを配置して

プロパティ 設定値 
名前 txtTo
コントロールソース  
文字配置

さらにどこでもいいので、コントロールソースが =[Pages] のテキストボックスを配置しておきます。

レポートモジュール

第二案 Printメソッド利用

レポートモジュールレベルのパブリック変数を2つ宣言しておいて(先頭番号、最終番号)、 そこに、ページヘッダーのフォーマット時にレコード番号を先頭番号に代入、 ページフッターのフォーマット時にレコード番号を最終番号に代入、 この変数より 1番~20番 というような文字列を生成して、ページフォーマット時のイベントで、 Printメソッドで出力します。

レポートモジュール

ページフッターセクションのフォーマット時の代入する文字列で最後に半角空白を追加しているのは、AC2007の Printメソッドのバグ対策です。詳細は次回の記事で報告します。

サンプルMDB が下記からダウンロードできます。
RptPageHeaderFromTo_07.zip (Access 2007 形式 - 35kb)
RptPageHeaderFromTo.zip (Access 2002-2003 形式 - 35kb)
RptPageHeaderFromTo_2k.zip (Access 2000 形式 - 28kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/222-01ac8595
該当の記事は見つかりませんでした。