#663 レポートの最後に”以下余白”を追記するには? レポート、VBA

契約書や見積書等において、記載がそれ以降なく、余白部分にあとから追記されないようにするため、明細データの次行に「以下余白」をいった文字を出力したい場合があります。

そのようなとき、印刷するデータを入力する画面において、使う人が意図的に「以下余白」といった文字を1件の明細データのように入力するのもひとつの方法ですが、ここではそれ以外の2つの方法を紹介します。


【1】ラベルとしてレポートヘッダに出力する方法
単純に「レポート フッター」セクションに「ー 以 下 余 白 −」といったような標題のラベルコントロールを配置するだけです。


「レポート フッター」セクションに配置されたコントロールは、レポートの最後に1回だけ出力されます。また「ページ フッター」とは違って、用紙の下の方に出力されるのではなく、詳細セクションの最終レコードのすぐ後ろに出力されます。よって見た目は、明細データの最後のような感じで印刷することができます。

なおここでは、より明細データのようなイメージ、つまり詳細セクションと同じデザインで出力されるよう、詳細セクションにある「商品コード」などと同じサイズ・同じ位置、かつ同じ境界線色を設定したラベルコントロールも配置しています。

プレビュー例:


【注意】
「レポート フッターはレポートの最後に1回だけ出力」ですので、グループ化されたデータなどで複数グループを一度に印刷するような場合は上記のままでは使えません。そのような場合は 「レポート フッター」ではなく「グループ フッター」に各コントロールを配置します。


【2】ダミーのレコードとして出力する方法
ここではまず下記のようなデザインのレポートを作成します。


ここでのポイントは、レポートヘッダー/フッターおよびページフッタ―の各セクションは使ってはいるものの、コントロールは配置されていない点です。通常であれば、単に明細データだけが出力されて終わります(もちろんデザイン的に必要であればそれらのセクションにいろいろなコントロールを配置してもかまいませんが)。

また、「詳細」セクションに「ー 以 下 余 白 −」という標題のラベルコントロールを配置しています。したがって、ふつうにこれを印刷すれば、レコードの数だけ「ー 以 下 余 白 −」が出力されることになります。当然それでは最後だけに”以下余白”を追記することにはなりません。

そこで、下記のようなプログラムを使って、『本来のレコードについては”以下余白”は出力せず、最後のレコードを出力したあとにそのレコードをダミーでもう1回出力し、そこで”以下余白”を出力する』ようにしています。実際には、”以下余白”のラベルの可視/非可視や、フィールドと連結したコントロールの文字色を切り替えることで、見た目出力したり出力されなかったりしているように見せています。

Option Compare Database
Option Explicit

Private pintRecordMAX As Integer    '印刷する総レコード数
Private pintRecord As Integer       '現在印刷中のレコード番号


Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
'レポートヘッダのフォーマット時

  '印刷する総レコード数を取得
  pintRecordMAX = DCount("*", Me.RecordSource)
  '現在印刷中のレコード番号を初期化
  pintRecord = 0
  '以下余白ラベルを非可視に初期設定
  Me!lbl以下余白.Visible = False

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
'詳細セクションフォーマット時

  '以下余白を出力するかどうかのフラグ
  Dim blnMargin As Boolean

  '現在印刷中のレコード番号をインクリメント
  pintRecord = pintRecord + 1

  '現在のレコード番号と総レコード数を比較
  If pintRecord < pintRecordMAX Then
    '総レコード数未満のときは次レコードへ移動
    Me.NextRecord = True
  ElseIf pintRecord = pintRecordMAX Then
    '総レコード数になったときは次レコードへ移動しない(次回も最終レコードを出力)
    Me.NextRecord = False
  Else
    '総レコード数を超えたとき
    '以下余白のフラグをON
    blnMargin = True
    '次レコードへ移動する(全レコード出力完了とする)
    Me.NextRecord = True
  End If

  If blnMargin Then
    'フラグがONになったとき
    '以下余白ラベルを可視にする
    Me!lbl以下余白.Visible = True
    '各データのコントロールの前景色を白にすることで
    '見かけ上は空欄が印刷(枠線のみ印刷)されるようにする
    Me!受注ID.ForeColor = vbWhite
    Me!商品コード.ForeColor = vbWhite
    Me!商品名.ForeColor = vbWhite
    Me!数量.ForeColor = vbWhite
    Me!単価.ForeColor = vbWhite
    Me!金額.ForeColor = vbWhite
  End If

End Sub


プレビュー例:


【注意】
ここでは文字色を白にする、つまり紙の色と同じにすることであたかも見えないようにするというごまかしの部分もあります。そのため、最低限、詳細セクションの「代替の背景色」プロパティは「色なし」に設定しておく必要があります。でないと”以下余白”が偶数行になった場合に文字が見えてしまいます。
一方、この例ではテキストボックスの境界線色を指定することでそれを欄の枠線として出力するようにしています。もしテキストボックスの境界線が”透明”だったり、直線コントロールなどを使って枠線を表示するようなデザインになっている場合には、文字色を変えるのではなく、そのコントロール自体を非表示にすることで同様の出力結果を得ることができます。
例:
    Me!商品名.Visible = False
    Me!数量.Visible = False
    Me!単価.Visible = False
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved