accessのbvaの本を参照してレコードがない場合でも最後まで罫線を出力する方法を試しているのですが、インクリメントがうまくいっていないのかいつまでも改ページを続けてしまいます。
どなたか解決する方法を教えてください。
Option Compare Database
Option Explicit
'次の3つの変数はdeclarationセクションで宣言します
'現在印刷中のレコード番号を表す変数
Private pintRecord As Integer
'レコードソースの全レコード数を表す変数
Private pintRecordMAX As Integer
'1ページ当たりに印刷するレコード数の定数
Private Const cintRecperPage As Integer = 15
Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
'現在印刷中のレコード番号を初期化します
pintRecord = 0
'レコードソースの全レコード数を取得します
pintRecordMAX = DCount("*", "T_出荷明細", "出荷No=reports![R_出荷証明書3 test]![出荷No]") '"*"にすることでクエリ内のレコード数をカウント。Null値フィールドを含むレコードも対象。
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
'各テキストボックスの可視/非可視のフラグ
Dim blnVisible As Boolean
'現在印刷中のレコード番号をインクリメントします
pintRecord = pintRecord + 1
If (pintRecord Mod cintRecperPage) > 0 Then
'1ページ内の途中のレコードを印刷している場合
'改ページしないようにします
Me!bpage.Visible = False
'印刷するレコードの位置によって、各テキストボックスの可視/非可視の
'フラグと、次レコードへ進めるかどうかの設定を行います
If pintRecord < pintRecordMAX Then
blnVisible = True
Me.NextRecord = True
ElseIf pintRecord = pintRecordMAX Then
blnVisible = True
Me.NextRecord = False
Else
blnVisible = False
Me.NextRecord = False
End If
Else
'1ページ内の最後のレコードになったとき
If pintRecord <= pintRecordMAX Then
'まだ印刷するレコードが残っているときはその行を印刷後、改ページします
blnVisible = True
Me!bpage.Visible = True
Else
'印刷するレコードがもうないときはその内容は印刷しません
blnVisible = False
End If
End If
'フィールドと連結したテキストボックスの可視/非可視を設定します
Me![品番].Visible = blnVisible
Me![品名].Visible = blnVisible
'Me![寸法使用].Visible= blnvisible
Me![数量].Visible = blnVisible
Me![備考].Visible = blnVisible
End Sub
No.10ベストアンサー
- 回答日時:
私の設定は「T_出荷明細」でレポートを
作成したので、No7は必要ないですね。
一応、フォームとT_出荷証明書とクエリを作成して
実行しました。ほぼ直すところは
なく正常に動くのですが。
補足について:
(1)
>行数が実際のレコード数が28であったら14行改ページ
>(ヘッダー除き)なので通常は2ページちょうどになる
>はずなのですが、1ページと13行になります。
これは、質問のコードの中で、
'1ページ当たりに印刷するレコード数の定数
Private Const cintRecperPage As Integer = 15
としているので、レコードが15行まで表示され、
15以上になると次のページに表示される、
ということなので、
>1ページと13行になります。
は正常ですが。
(2)
>あとループも止まりません。
これはどのような状況ですか。
piroin654さん
すみません。解決しました。
原因は改ページコントロールの位置だったようです。
言われていた通りコードには問題はありませんでした。
レポートデザインで改ページコントロールと直線コントロールの配置が同じ位置になっていたので、VBAでいくら15行改ページにしていても14行で改ページになっていたみたいです。
Q_出荷証明書のIDを表示してみてわかったのですが、ループと思っていたところも同じIDだけではなく消えていたと思っていた番号が15行毎に改ページされ最後のレコードになるまで出続けていただけでした。
31レコードの場合
1ページ目ID「1~14」が表示
2ページ目ID「15~28」が表示
3ページ目ID「29」が15回表示
4ページ目ID「29」が1回表示され「30」が14回表示
5ページ目ID「30」が1回表示・・・・・
といった感じでなっていました。
もともと他の人が作成していたレポートのVBAが15で改行の設定になっていたのに、出力されていたレポートが14行で改ページされていたので、15で割ったときはヘッダーを含めて15行なのだと勝手に勘違いしていました。
改ページコントロールの位置を変えるとヘッダーを除いて15行毎にきちんと改ページされていたので、勘違いに気づきました。
いろいろとありがとうございました。
No.11
- 回答日時:
なるほど、やはり改ページコントロールの
位置の問題でしたか。ループと聞いて
ひょっとしてと思って改ページコントロールの
位置をずらしてみて確認していたのですが、
他の問題があるのかと思っていました。
質問で提示されたコードはこのような場合の
模範コードのようなものですから、コードには
問題ないと思っていたのですが、解決はなによりです。
同じようなレポートを作成したいという人に
とってはこのコードは最高のサンプルになります。
No.9
- 回答日時:
連続ですみません。
No8の続きですが、「出荷No」フィールドを
表示する場合、
Me![出荷No].Visible = True
を
Me![出荷No].Visible = blnVisible
として、他のフィールドと同じに
表示すれば見栄えもいいかもしれません。
piroin654さん
回答いただきありがとうございます。
piroin654さんの指摘されていたとおりにしてみましたができませんでした。
内容詳しく添付します。
テーブル
T_出荷証明書
・出荷No
・作成年月日
・得意先etc
T_出荷明細
・ID(オートナンバー)
・出荷No
・品番
・品名
・数量
・備考
クエリ
Q_出荷証明書
・ID
・出荷No(T_出荷証明書)※抽出条件 [Forms]![F_出荷印刷画面]![F出荷No]
・作成年月日
・得意先etc
・品番
・品名
・数量
・備考
【レポート】
ページヘッダー
「テキスト」・出荷No.・得意先名
「ラベル」・品番・品名・数量・備考
出荷No.ヘッダー
詳細
「テキスト」品番・品名・数量・備考
「改ページコントロール」bpage
ページフッター
Q_出荷証明書をもとに「R_出荷証明書3test」を作っています。
フォームで選択された「出荷No」をレポートで表示し出力する仕様です。
MAX値をカウントするところですが、
やはり、
pintRecordMAX=Dcount("*","T_出荷明細","出荷No=reports![R_出荷証明書3test]![出荷No]"
にすると行数が実際のレコード数が28であったら14行改ページ(ヘッダー除き)なので通常は2ページちょうどになるはずなのですが、1ページと13行になります。
レコードが38であれば通常は2ページと10行になるはずが、2ページと8行になります。
なぜか1改ページ1行減っています。
あとループも止まりません。
No.8
- 回答日時:
こちらの設定はN6、No7のようなところですが、
少し確認したいことがあります。
グループ化の設定はNo6の(2)にありますが、
質問の場合はグループの対象となるものが
「出荷No」ですから、このフィールドが
出荷Noセクションのどこかになければ
質問のコードが正常に作動しません。
したがってこちらではレポートの
レコードソースを「T_出荷明細」にして、
No6の要領でレポートを作成し、「出荷No」フィールド
を詳細セクションに設定し、これを
グループ化の対象にしています。
したがって、そちらで作成している
レポートのフィールドに「出荷No」フィールドを
追加し、コードの最後に、No6の(5)と同じように
Me![出荷No].Visible = False
を追加してみてください。こちらでは
一応Falseに設定していますが、
Me![出荷No].Visible = True
としてください。これで質問のコードが
正常に作動すると思います。
No1の補足にある、
>pintRecordMAX = DCount("*", "T_出荷明細")にすること
>でいつまでもループし続ける現象は解消しました。
>ただ、最終ページが最後まで罫線がひかれなくなりました。
>この現象を解消する方法ありますか?
のようなことは何らする必要はありません。
問題はグループ化の対象のフィールドである
「出荷No」をレポートのどこに設定するかの
問題だけだと思います。
No.6
- 回答日時:
質問のコード内容には問題はまったく無い
と思いますが。
レポートの作成過程を記しておきます。
(1)
「T_出荷明細」を作成
フィールドはNo1と同じ
(2)
レポートを「T_出荷明細」を基にして
新規作成でオートレポート表形式で自動作成し、
名前を「R_出荷証明」に変更。
「並べ替え/グループ化」で「出荷Noヘッダー」
を設定。設定内容はNo1と同じ。
(3)
直線コントロール、改ページコントロール
を詳細セクションに設定。
改ページコントロールの名前を「bpage」
に設定。
(4)
レポートのコード表に質問のコードを
貼り付け。「出荷Noヘッダー」のフォーマット時
のイベントなどのプロシージャを各セクションの
プロパティから認識確認。
(5)
レポート名の設定により、
pintRecordMAX = DCount("*", "T_出荷明細", "出荷No=reports![R_出荷証明書3 test]![出荷No]")
を
pintRecordMAX = DCount("*", "T_出荷明細", "出荷No=reports![R_出荷証明書]![出荷No]")
に設定。
コードの最後は以下に設定。フィールドを少なくしているので、
Me![出荷No].Visible = False
Me![品番].Visible = blnVisible
Me![品名].Visible = blnVisible
以上ですが、正常に作動します。レコード数
は各「出荷No」ごとに15未満、15以上などを
設定しています。
レポートの詳細には「出荷No」を入れています。
表示、非表示は(5)のようにしています。
なお、改ページコントロールの位置は
詳細セクションの中で、一番下方に設定
します。
No.5
- 回答日時:
直線nextrecord ???
コード中の
Me.NextRecord = False
あるいは
Me.NextRecord = True
のNextRecordはレポートの NextRecord プロパティ
のつもりでしたが。
直線の名前を「直線100」のように変更してみて
ください。
こちらではコードはほとんど変更していない
状態で正常に表示されています。
この回答への補足
piroin654さん
すみません直線nextrecordではなく
直線はnextrecordプロパティを用いて次のデータに行くMAXレコードになったときは、nextrecordに移動しないという設定にしていて、直線は出続ける設定になっています。
でした。打ち間違いです・・・。
No.4
- 回答日時:
なかなか、 hatena さんが登場してこないので・・・
より簡単な方法です。
レコードがない場合も用紙の最後まで罫線を出力する
http://hatenachips.blog34.fc2.com/blog-entry-17. …
レコードがない場合も用紙の最後まで罫線を出力する NextRecord版
http://hatenachips.blog34.fc2.com/blog-entry-91. …
bonaronさん
回答ありがとうございました。
hatenaさんは一度回答いただいていたのですが、事務局から削除されていました。
Hpも見させていただきましたが、弊社でもともと使用していたプログラムのエラー回避の為に行っているため、あまりにも変えてしまうと・・・という部分があったので本を見て作成していたところです。
その上で、わからない部分があったので質問を上げさせてもらいました。
No.2
- 回答日時:
レポート名を「R_出荷証明書」としたので、
pintRecordMAX = DCount("*", "T_出荷明細", "出荷No=reports![R_出荷証明書3 test]![出荷No]")
は、
pintRecordMAX = DCount("*", "T_出荷明細", "出荷No=reports![R_出荷証明書]![出荷No]")
のようにしています。
これは影響はないですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
accessのレポートを20行固定にする方法
Access(アクセス)
-
Accessでレポート内の繰り返しレコードの行数を固定したいです。
その他(Microsoft Office)
-
アクセスのレポートのヘッダーを2ページ以降にもつけるには?
Access(アクセス)
-
-
4
アクセス レポートの行数を固定したい
Access(アクセス)
-
5
Accessの桁区切りについて教えてください。
Access(アクセス)
-
6
Accessレポートでの改ページ
Visual Basic(VBA)
-
7
Accessレポートで特定条件で改ページしたい
PowerPoint(パワーポイント)
-
8
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
9
Accessのレポートの集計に条件をつけたい
その他(データベース)
-
10
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
11
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差込印刷で顧客別に複数行のデ...
-
ACCESSのフォームで次のレコー...
-
access レポートで罫線...
-
ファイルメーカでの条件付き画...
-
Accessのレポートの集計に条件...
-
アクセスでのエクセルでいう行...
-
ACCESSでのランダムのレ...
-
ADOで現在のレコードの次のレコ...
-
ファイルメーカー8 一括に貼付
-
ファイルメーカーでレコード複...
-
ACCESSでオフセットを求める方法
-
FileMakerで特定のレコードのみ...
-
VSAM
-
ACCESSで空白行を追加
-
ファイルメーカーで可能?
-
LIKEとINを同時に使いたい
-
ファイルメーカーでレコードご...
-
PSQLで-- More --を表示しない方法
-
ファイルメーカーで、Countでな...
-
アクセスで入力したデータの順...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
差込印刷で顧客別に複数行のデ...
-
ACCESSのフォームで次のレコー...
-
180g重量版レコードとは? 180...
-
Accessのレポートの集計に条件...
-
ADOで現在のレコードの次のレコ...
-
ACCESSのレコード操作で1つ前...
-
アクセスデータベースのUnicode...
-
ファイルメーカーで最大シリア...
-
PSQLで-- More --を表示しない方法
-
accessのマクロで「一時変数設定」
-
日付の加算・減算ってできますか?
-
ファイルメーカーで該当件数を...
-
ホスト汎用機でのNDBアクセス方法
-
ACCESSでオフセットを求める方法
-
Accessで最終レコードの削除に...
-
ラベルをクリックしてレコード...
-
VSAM
-
ACCESSでのランダムのレ...
-
ファイルメーカーの重複レコード
-
ファイルメーカーで一括入力す...
おすすめ情報