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

2列、両面印刷で、裏表が同じレコードになるようにしたい

1つのクエリを元に作成した異なる2つのレポートを両面印刷する方法

Access Club の上記の質問に対して検証の為に作成したサンプルです。

サブレポートを埋め込んでやる方法もありますが、連番が必要になること(クエリで出そうとすると複雑かつ重い処理になる)、レポートオブジェクトが増えてしまうこと、などのデメリットを考慮して、一つのレポートでVBAでレイアウト制御する方法にしてみました。

両面印刷のとじ方向指定、短辺とじ(左辺とじ)

印刷イメージ(表1ページ目)
_____________
| レコード1  | レコード2  |
|       |       |
|       |       |
|      |      |
| 住所    | 住所    |
| 業者名   | 業者名   |
|______|______|

印刷イメージ(裏 2ページ目)
_____________
| レコード2  | レコード1  |
|       |       |
|  業者名  |  業者名  |
|       |       |
| 請求金額 | 請求金額 |
|  請求内容 |  請求内容 |
|______|______|

左辺とじ でプリンタの両面印刷機能を使って印刷する場合は、裏面はレコードを左右入れ替えないと、レコード1の裏面にレコード2が来てしまいます。

難易度:

動作原理

言葉だけでは説明しづらいので図を使って動作原理を説明します。

デザインビューで下記のようにレイアウトします。

Rpt2ColumnothSides1.png

上のデザインで何もせずに普通に出力すると、例えば3レコードある場合、

Rpt2ColumnothSides2.png

これを最終ページを除く奇数ページを出力しないようにする(フォーマット時イベントをキャンセル)と、上記の図のレコード1が出力されなくなります。

奇数ページのフォーマット時で、非連結テキストボックスにデータを代入すると、上書きするまで残るので、下記のように出力をキャンセルしたデータが次ページに表示されます。

Rpt2ColumnothSides3.png

レコード件数が奇数の場合、最終レコードが重複して出力されますので、連結テキストボックスを非表示にします。これで、下記のように希望の出力になります。

Rpt2ColumnothSides4.png

レポートデザイン

テーブルのフィールドは、請求書ID, 業者ID,業者名,住所,請求金額,請求内容 です。(正規化されてませんが、クエリの出力結果と考えてください。)

詳細セクションは2ページ分のサイズにして、連結項目を、右上(表面)、左下(裏面)に配置し、非連結テキストボックスを左上(表面)、右下(裏面)に配置します。非連結テキストボックスの名前は、連結コントロール名+ "1" とします。

表面と裏面の項目の間に、改ページコントロールを配置します。

詳細はサンプルを見てください。

レポートモジュール

項目名(コントロール名)をカンマ区切りで定数として宣言して、Splitで配列にして、ループで利用できるようにしてます。また、レポートヘッダーでコントロールの可視を初期化してます。

サンプルMDB が下記からダウンロードできます。
Rpt2ColumnBothsides_07.zip (Access 2007 形式 - 23kb)
Rpt2ColumnBothsides.zip (Access 2002-2003 形式 - 22kb)
Rpt2ColumnBothsides_2k.zip (Access 2000 形式 - 19kb)

12/15 13:00 サンプルを修正しました。以前にダウンロードした方は再度、ダウンロードしてください。

拍手する

Leave a reply






Trackbacks

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