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

印刷時拡張時の下余白に罫線をひく、余白が少ないときは次ページへ

レポートの上部に「印刷時拡張」が「はい」のコントロール(テキストボックス、サブレポート)が配置してあり、データ量により下余白が変化する場合でも、余白全体に罫線を引きたい。
また、下余白が最小値より少ない場合は改ページして次ページの全体に罫線を引きたい。

というような用件に対応するサンプルです。オリジナルの質問は、

moug モーグ|Access(VBA)|レポートの余白にあわせて改ページしし、罫線をひきたい

レポートの特性をうまく使えば、割とシンプルなVBAで実現できます。また、いろいろなテクニックを組み合わせていますので、他にもいろいろ応用できるテクニックが含まれています。目を通しておくときっとどこかで役にたつことがあると思います。

リンク有り画像

難易度:

リンク有り画像

改ページの制御

普通に考えると、印刷時拡張のコントロールの下に改ページコントロールを配置して、印刷時拡張で移動したコントロールの位置を取得し、その位置によって改ページの可視をON/OFFすればよさそうです。が、改ページなどのレイアウトに影響する要素は印刷時に設定してもカレントセクションには反映されず次のセクションから有効になるので手遅れです。フォーマット時なら有効ですが、印刷時拡張後の高さや位置は印刷時イベントでしか取得できません。

詳細セクションを複数作成できれば「同一ペー印刷」を「はい」を利用して自動で改ページさせることができます。が、実際には複数作成することは不可能です。そこで、使うテクニックが主キーフィールドのグループヘッダ/フッタです。

「グループ化、並べ替え、集計」(並べ替え/グループ化の設定)でグループを追加して主キーフィールドでグループ化します。 グループフッタを表示させ、高さを10cmに、「同一ページ印刷」を「はい」にします。余白部分のラベル等のコントロールを、このグループフッターに配置します。
(主キーでグループ化することで、1レコード毎にグループフッターが表示されるので、詳細セクションの代用にできます。)

これで、下余白が10cm以下になった場合は、グループフッターは次ページに送られます。

この「主キーフィールドグループヘッダ/フッタ」はいろいろな場面で使えるテクニックなので覚えておくときっと役立ちます。

罫線の印字

次に罫線ですが、普通は直線コントロールを配置して表示します。で、この高さや位置をVBAで調整しようとしても印刷時では高さや位置はやはり変更できません(変更してもすぐには反映されない)。

そこでLineメソッドを使って罫線を描画するのですが、グループフッターの印刷時で描画する場合は、セクションの高さや幅を超える範囲には描画できません。また、印刷時では高さを変更してもすぐには反映されません。

そこで利用するテクニックが、ページフォーマット時のイベントにLineメソッドで描画する方法です。

ページフォーマット時だと、ページ全体(印字範囲)どこでも描画できます。

コーディングの考え方は下記です。

グループフッタの印刷時イベントで、セクションの印字開始位置を取得して、フォームモジュールレベル変数に格納します。

ページフォーマット時イベントで、上記で保存して甥か印字開始位置を基準にして、ページの最下部までLineメソッドで罫線を引きます。その後、印字開始位置変数には0を代入して初期化しておきます。
グループフッタが表示されないページでは罫線は必要ないので、印字開始位置変数が0のときは罫線は出力しないようにします。

レポートモジュール

これで、
下に10cm以上の余白がある場合は、グループフッターの項目が表示され、下の余白いっぱいに罫線が引かれます。
余白がない場合は、次ページにグループフッターの項目が表示され、ページ全体に罫線が引かれます。

補足

Me.Top - Me.Printer.TopMargin でセクションの印字開始位置を取得してます。Me.Printer.TopMargin は上余白なんですが、AC2000以前ではPrinterオブジェクトは実装されてませんので、この上余白は自前で計算して定数宣言して利用してください。

サンプルファイルが下記からダウンロードできます。
RptLinesOnBottomMarginByCanGrow_07.zip (Access 2007 形式 - 26kb)
RptLinesOnBottomMarginByCanGrow.zip (Access 2002-2003 形式 - 20kb)
RptLinesOnBottomMarginByCanGrow_2k.zip (Access 2000 形式 - 22kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/349-b4b2690c
まとめtyaiました【印刷時拡張時の下余白に罫線をひく、余白が少ないときは次ページへ】
レポートの上部に「印刷時拡張」が「はい」のコントロール(テキストボックス、サブレポート)が配置してあり、データ量により下余白が変化する場合でも、余白全体に罫線を引きたい。 また、下余白が最小値より少ない場合は改ページして次ページの全体に罫線を引きたい。...
該当の記事は見つかりませんでした。