#473 空行にも罫線を出力させるには? レポート、VBA

Accessのレポートでは、「レコードソースとなっているテーブルやクエリのレコードがすべて印刷されるとそれ以降は空白となる」という特性があります。
通常のレポート

一方、データがなくなったあとも、用紙の一番下まで罫線だけは印刷したいという場合があります。それを実現する方法として、レポートのモジュールを使ってレポート独特のプロパティやレコードを操作するという方法もありますが、少々複雑ですので、ここでは”作業テーブル”を使った方法を紹介したいと思います。

ここでは、現在「rpt受注明細」というレポートが、「qsel受注明細」というクエリをレコードソースとしているものとして、そこからカスタマイズしていく手順を説明します。

  1. まず、qsel受注明細から出力されるフィールドとまったく同じ構造を持った作業テーブルを作成します。ここではそれを「wtbl受注明細」とします。

    このテーブルは手作業で作ってもかまいませんが、選択クエリを一時的に”テーブル作成クエリ”に変更して実行すると、フィールド数が多い場合などは楽に作成できます(ただしそのあと部分的にデザイン変更が必要な場合があります)。

    qsel受注明細:
    qsel受注明細クエリ
    wtbl受注明細:
    wtbl受注明細テーブル

  2. 次に、レポートのレコードソースプロパティを上記の作業テーブルに変更します(ここで同じ結果が出力されるか一度動作確認をしておくとよいでしょう)。

  3. 次に、このレポートを印刷実行するフォーム上のボタンなどのイベントプロシージャを書き換えます。

    これまではDocmd.OpenReportで単にレポートを開いていたのに対して、事前に、当初レコードソースとなっていたクエリ(ここではqsel受注明細)からレコードを読み込んで、その全レコードを作業用テーブル(ここではwtbl受注明細)に書き出すという処理を追加します。

    そのサンプルは次の通りです。ここでは実レコード数に関わらず、20行分の罫線を書き出すようにしています。

    Dim dbs As Database
    Dim rstin As Recordset
    Dim rstout As Recordset
    Dim intRecCnt As Integer
    Dim iintLoop As Integer

    Set dbs = CurrentDb

    '出力先の作業テーブルを空にする
    dbs.Execute "DELETE * FROM wtbl受注明細"

    '元のレコードソースのクエリを開く
    Set rstin = dbs.OpenRecordset("qsel受注明細")
    '出力先の作業テーブルを開く
    Set rstout = dbs.OpenRecordset("wtbl受注明細")

    '出力レコード数を初期化
    intRecCnt = 0

    'クエリの全レコードを読み込んで作業テーブルに追加するループ
    With rstin
      Do Until .EOF
        rstout.AddNew
          rstout!受注コード = !受注コード
          rstout!商品コード = !商品コード
          rstout!単価 = !単価
          rstout!数量 = !数量
        rstout.Update
        '実際に出力されたレコード数をインクリメント
        intRecCnt = intRecCnt + 1
        .MoveNext
      Loop
      .Close
    End With

    '所定の行数になるまで空レコードを追加
    For iintLoop = 1 To 20 - intRecCnt
        rstout.AddNew
        rstout.Update
    Next iintLoop
    rstout.Close

    'レポートを開く
    DoCmd.OpenReport "rpt受注明細", acViewPreview



準備ができたら、上記のプロシージャを実行してみます。この例では次のような結果になります。
実行結果

なお、このときの作業テーブルの中味は次のようになっています。クエリにあったレコードの後ろに、トータル20行になるまで空のレコードが保存されていることが確認できると思います。
作業テーブルの中味


※レポートにグループ化や並べ替えなどの設定がされている場合、この方法では空レコードが先頭に出力されてしまうことがあります。その場合には並べ替えの基準を変更したり、テーブルにオートナンバー型のIDフィールドのようなものを設定してそれを並べ替えの基準にするなどの対処が必要です。

※この例で使っているレポートでは、テキストボックスの外枠に色を付けることによってそれを罫線のように見せています。

※この例では、もし20件を超えるデータがクエリにあった場合、レポートの2ページ目以降ではやはり最終レコードより下は罫線が出力されない状態となってしまいます。そのようなケースが想定される場合には、20の倍数で出力済みレコード数をチェックして空レコードを出力するよう、さらなるカスタマイズが必要となります。
| Index | Prev | Next |



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