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

レコードがない場合も用紙の最後まで罫線を出力する

レコード数に関係なく1ページの行数を固定したい。
「ページの最後まで、空白行を追加したい。

この質問は、レポートに関するFAQのベスト1と思われる。

解決法は、MSのサポート技術情報にある。
レコードがない場合も用紙の最後まで罫線を出力する方法
しかし、これもかなり複雑なコードを記述する必用があるし、
難解である。掲示板などで、上手く動かずに泣きついているのを
よく見かけます。VBAとレポートのイベントのメカニズムを理解して
いないと使いこなすのは難しい。

今回は、VBAのコードは1行記述するだけのシンプルな方法を紹介します。

RptFixRow1.png

難易度:

サンプル作成

下記のような納品書を例に説明します。
RptFixRow.gif 

ページヘッダーに、ヘッダー項目と1ページ分の罫線を配置します。
ページヘッダーデザイン

ヘッダー項目のキーフィールド(書類番号、受注コードなど)でグループ化して、
グループヘッダーとグループフッターを表示させます。グループヘッダーの
高さは、ヘッダー部分の高さに設定します。
グループヘッダーの[セクション繰り返し]を「はい」に設定します。

2016.11.10 追記: 2007以降の場合は、「代替の背景色」プロパティは「色なし」に変更しておいてください。規定値のままだと、背景色でヘッダーが上書きされて非表示になります。
RptFixRowGroupHeaderDsign.png

グループフッターの[改ページ]は「カレントセクションの後」に設定します。
詳細セクションには、明細項目を配置します。

ページヘッダーのフォーマット時のイベントプロシージャに、

と1行記述します。

1グループで複数ページになる場合、1ページの件数を固定したい場合は、

動作原理の解説

通常は、セクションの印刷後は、その高さ分移動して、次のセクションが
出力されます。
MoveLayout = False とすると、印字位置が移動せず同じ位置から
重ねて出力されます。
ページヘッダーでヘッダー項目と1ページ分の罫線を出力します。
グループヘッターでヘッダー分の高さだけ移動して、
詳細セクションを、出力します。

サンプルファイルが下記からダウンロードできます。
RptFixRow_07.zip (Access 2007-2013 形式 - 96kb)
RptFixRow.zip (Access 2002-2003 形式 - 87kb)
RptFixRow_2k.zip (Access 2000 形式 - 86kb)

拍手する

19 Comments

ちーまげ says..."今日もお世話になりました。"

hatena様、
1年ほど前にお世話になりました ちーまげです。

現在は生産管理システムを作成しておりますが、使用する営業さんたちは
「あれもやって」、「こんな機能も付けて」と簡単に言ってくれます。(^^;
そんな自分の知識や能力を超えた苦悩の日々にhatena chipsは
一筋の光明です。
今日も助けていただきました。ありがとーございました。

2010.11.04 17:16 | URL | #- [edit]
名無し says...""

こんな技があったとは!
目からうろこです。

2012.06.18 20:52 | URL | #- [edit]
みき says...""

いつも参考にさせていただいています。
ありがとうございます。

AC2007にて実行すると上手くいかないようです。
もし出来ましたら2007版を作成いただけると
幸いです。

2012.07.04 15:03 | URL | #- [edit]
hatena says..."AC2007での動作"

AC2007でも問題なく動作します。

印刷プレビューで確認してますか?
レイアウトビュー、レポートビューでは動作しません。

2007形式(accdb)のサンプルも一応アップしておきます。

2012.07.05 11:22 | URL | #5uE6dEgY [edit]
名無し says...""

非常にわかりやすい内容で、いつも参考にさせていただいています。
ありがとうございます。

この方法をサブレポートで使用したく、実行しました。
ページヘッダーではなくレポートヘッダーを使っており、
レポート単体ではうまく機能しているのですが、
サブレポートとして見た場合(親レポートを開いた場合)、
罫線(奇数行)がうまく表示されません。
どこに問題があるのかさっぱりわからず苦心しております。
アドバイスをいただけると助かります。

2013.05.10 10:49 | URL | #- [edit]
hatena says..."re:この方法をサブレポートで使用"

この方法をサブレポートで使用したことがないので、どのような現象なのか掴めてないですが、
サブレポートを使う場合は、メインフォームの方に直線コントロールを罫線として配置しておいて、サブレポートをその罫線の背面にくるようにするという方法を取ったことがあります。
この方法を試してみてはどうでしょうか。

この方法の方がいいという場合は、現状のレポートのファイルをアップロードしてもらえれば原因をつかめるかもしれません。

2013.05.10 15:57 | URL | #5uE6dEgY [edit]
名無し says...""

サブレポートの操作の質問をしたものです。
ご連絡ありがとうございます。

結局私もメインフォームに罫線を置く方法で対応したのですが、
失敗の原因は単純…サブフォーム 詳細セクションの"代替の背景色"に色設定をしていたことでした。
お騒がせして申し訳ありありませんでした。

お返事いただけてうれしかったです。

2013.05.13 11:24 | URL | #- [edit]
あき says..."お願いがあります"

いつも参考にさせていただいています。
1グループで複数ページにわたる場合のコードをご提示いただいているものを使用してみましたが、2枚以上になる場合に表示される位置が枠外に表示されてしまいます。参考データに複数ページにわたる場合のものを掲載いただけないでしょうか?
周りに詳しい者もおらず、苦戦しております。

2013.11.26 15:51 | URL | #- [edit]
hatena says..."re:お願いがあります"

あきさん、こんばんわ。

記事内の
「1グループで複数ページになる場合、1ページの件数を固定したい場合は、」
のコードを適用してください。

2013.11.26 17:28 | URL | #5uE6dEgY [edit]
鉄血 says..."私のミスの可能性はどこに……"

はじめまして、鉄血と申します。知恵袋から紹介していただき、
早速サンプルを参考にさせていただいているのですが……。

仕上がったものは何故か表のレイアウトには問題ないのですが、
1ページに1レコードしか表示されません。
2列のものを作ろうとしていますが、1列にしても同様のため
原因は他にありそうです。

手順は掲載されているものをそのまま追ったつもりですが……。
何か原因で考えられるものがあれば、アドバイスをお願いします。

2013.12.06 21:32 | URL | #xugUH2Mw [edit]
hatena says..."re:私のミスの可能性はどこに……"

> 仕上がったものは何故か表のレイアウトには問題ないのですが、
> 1ページに1レコードしか表示されません。
> 2列のものを作ろうとしていますが、1列にしても同様のため
> 原因は他にありそうです。

グループ化しているフィールドが間違っているのでは。

このような伝票データは、通常は下記のような感じのテーブル構成になりますが、

ヘッダー項目のテーブル

伝票番号 (主キー)
顧客コード
日付

明細項目のテーブル

伝票番号
商品コード
数量
単価

このヘッダー項目の主キーの 伝票番号 でグループ化してますか。

上記と異なるなら、現状のテーブル構成と、グループ化しているフィールド名についての情報を提示してください。

2013.12.06 23:00 | URL | #5uE6dEgY [edit]
鉄血 says..."テーブル構成について"

hatena様、早々のお返事ありがとうございます。


そもそもの構造が違ってる気がしてきました……。


私が作ろうとしているものは『物品注文表』です。
大元のテーブルにある70種類程度の物品リストから
毎月必要分(大体20前後)を注文します。
クエリで抽出し、それを元にレポート出力しようとしています。

表は左右18づつ、合計36の枠があるわけです。


【ヘッダー項目のテーブル】

商品名
数量
単位

【明細項目のテーブル】

商品名
数量
単位

主キーは別に「登録番号」としてあり、レポートでは不要なので
組み込んでいません。


伝票データとは主旨が異なりますが、表(リスト)の
レポート出力で「枠を最後まで表示したい」という内容が
まさに希望のものだったので、喜び勇んでトライしました。


私の場合では、この手順では無理なのでしょうか?

2013.12.06 23:32 | URL | #xugUH2Mw [edit]
hatena says..."re:テーブル構成について"

> 【ヘッダー項目のテーブル】
>
> 商品名
> 数量
> 単位
>
> 【明細項目のテーブル】
>
> 商品名
> 数量
> 単位

まったく同じフィールド構成のテーブルが2つあるということですか。
データは異なるのですか。

あるいは、テーブルは一つのみですか。
履歴を残しておくようなタイプのテーブルではなく、毎回注文するたびに前回のデータをすべて削除してから、注文したいデータを入力して、全件レポートに出力というような運用でしょうか。

そちらの状況がよく分かりませんので、このコメント欄では使いづらいので、下記の私の運営している掲示板の方で質問しなおしてもらえますか。

その際、上記の点について、実際のテーブル構成、データ例などの情報も添えて質問してください。

2013.12.07 09:56 | URL | #5uE6dEgY [edit]
鉄血 says..."re:re:テーブル構成について"

> > 【ヘッダー項目のテーブル】
> >
> > 商品名
> > 数量
> > 単位
> >
> > 【明細項目のテーブル】
> >
> > 商品名
> > 数量
> > 単位
>
> まったく同じフィールド構成のテーブルが2つあるということですか。
> データは異なるのですか。
>
> あるいは、テーブルは一つのみですか。
> 履歴を残しておくようなタイプのテーブルではなく、毎回注文するたびに前回のデータをすべて削除してから、注文したいデータを入力して、全件レポートに出力というような運用でしょうか。
>
> そちらの状況がよく分かりませんので、このコメント欄では使いづらいので、下記の私の運営している掲示板の方で質問しなおしてもらえますか。
>
> その際、上記の点について、実際のテーブル構成、データ例などの情報も添えて質問してください。


お返事ありがとうございます。そのようにさせていただきます。

2013.12.07 13:45 | URL | #xugUH2Mw [edit]
matsu says...""

いつも参考にさせていただいてます。

5行になるように指定したのですが、5行ピッタリの状態ですと、なぜか空白ページが出るようになります。
原因は、ある程度まではつかめましたが、それ以上はわかりません。

何かアドバイスをいただけたら助かります。
よろしくお願いします。

2014.06.22 21:02 | URL | #24FJNFM2 [edit]
hatena says..."re: matsuさん"

詳細のフォーマット時に

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  RowCnt = RowCnt + 1
  If RowCnt >= 5 Then '1ページ当たり5件
    Me.詳細.ForceNewPage = 2 'カレントセクションの後で改ページ
  Else
    Me.詳細.ForceNewPage = 0 'カレントセクションの前で改ページ
  End If
End Sub

というようなコードを記述してますか。
もし、していたらそれは削除して、ページ設定の上下余白を調整して1ページに5件になるようにしてください。

2014.06.22 21:35 | URL | #5uE6dEgY [edit]
matsu says..."re:re: matsuさん"

早速のご返信ありがとうございます。

はい、そのようにコードを入れています。
余白調整ということですが、ページヘッダーに1ページ分の罫線と下のほうに1ページ毎に集計する欄を設けていますので、
この場合は、どのようにしたら、いいのでしょうか?




2014.06.22 22:52 | URL | #24FJNFM2 [edit]
sam says..."グループ変更ごとに1ページ目がヘッダー部のみ出力される"

はじめまして。
かなり前の記事になりますので目にされないかもしれませんが、質問させていただきます。
hatenaさんが記載されているとおり行ってみましたが、
以下のように出力されてしまいます。
1p:ヘッダー部と罫線のみ
2P:ヘッダー部・罫線と1グループ目のデータ
3p:ヘッダー部と罫線のみ
4p:ヘッダー部・罫線と2グループ目のデータ
ということで、グループが変わるごとにヘッダー部(データなし)が出力されます。
どのようにすれば解決できますでしょうか。
よろしくお願いいたします。

2016.07.06 18:59 | URL | #- [edit]
hatena says..."re:グループ変更ごとに1ページ目がヘッダー部のみ出力される"

グループフッターの[改ページ]プロパティは「カレントセクションの後」に設定しますか。
また、それ以外のセクションの[改ページ]プロパティは「しない」になってますか。

※なお、メールアドレスは不必要なので削除させていただきました。

2016.07.08 01:42 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

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