
Accessにてレポートを作成しています。
印刷プレビューの[最終行へ移動]ボタンの動作を
印刷プレビュー呼び出し元フォームからVBAで行えませんでしょうか。
※[印刷]ボタンを押下して遷移。
やりたい事は、ページの最後に横線を引くことです。
詳細_Printより、印刷用のworkテーブルに
ページ最終行の場合はフラグをアップデートし、
再度レポートを作成してフラグのある場合横線を引く、という構想をしていました。
印刷が2ページに渡る場合、
2ページ目以降のレコードの詳細_Printのイベントは
ページを移動させるまで発生しなかったため質問させていただきました。
縦・横線を条件付で結合等させて表示させたかったため、
詳細のlineメソッドを使って線を引いています。
また、質問内容が実現可能であれば
索引作成にも使用したいと思っています。
宜しくお願いいたします。
No.3ベストアンサー
- 回答日時:
>0のまま終わって
レポート内にPagesを表示する所が無いためです。テキストボックスを
ページヘッダ等に設け、コントロールソースには "=[Pages]" とし、
可視を"いいえ"にします。非表示ですがPagesを参照するので、Pagesが
0のまま(設定しない)ということが防げます。
先のプログラム例では最終ページの最終行で下線がでない可能性が
あります。(最終ページの行数が少ない場合)
レポートのレコードソースを"SELECT 1 AS 固定,* FROM ~"に変更し、
固定でもグループフッタを設けます。固定は定数なので、最終行後に
1回だけ生成されます。つまり、グループ化で、「固定」「K」の順に
指定し、それぞれにグループフッタを設けます。中身は直線です。
Dim 最大行数 As Long
Dim 行数 As Long
Dim 直前フッタ As Long
Private Sub ページヘッダーセクション_Format(~)
行数 = 0 '行数をクリア
End Sub
Private Sub 詳細_Format(~)
If Me.Pages = 0 Then
'最初にページあたりの行数を調べておく
If Me.Page = 1 Then 最大行数 = 最大行数 + 1
End If
行数 = 行数 + 1
End Sub
Private Sub グループフッター1_Format(~)
If Me.Pages = 0 Then
Cancel = 1 'Pages調査中はフッタを生成しない
Else
'最下行より前はフッタを生成しない
If 行数 < (最大行数 - 1) Then Cancel = 1
End If
直前フッタ = Cancel '直前にフッタを生成したかどうかを記録
End Sub
Private Sub グループフッター0_Format(~)
'最終行のフッタと最下行のフッタが重複しない処置
If 直前フッタ = 0 Then Cancel = 1
End Sub
ありがとうございます!
教えていただいた内容で下線を実現することができました!
ページあたりの行数を配列に持たせ
最終ページは結局、Me.Page = Me.Pagesの時のフッタ判断を
If 行数 < (最大行数) にしてラインを生成しました。
レコードソースを変更し、ということもできるのですね。
今回はとても勉強になりました。
詳しくありがとうございました。
ただ、今回の帳票に関しては・・・
詳細_Printにて、前の明細と同じであった場合
txt項目A.visible = Falseにするという設定を行っていました。
※txt項目A は印刷時拡張 ON
そのため、初回フォーマット時には当然
txt項目A.visible = Falseを考慮したページカウントをしないため
ページあたりの最大行数、及び、総ページ数が正しく取得できていませんでした。
表示させたいレイアウトがグループで表現できなかったため
上記手段を取ったのですが色々無理させすぎですね。。
もし上記設定をふまえた最大行数の取得が可能であれば
ご教授いただきたいとは思いますが、
今回はご丁寧にありがとうございました。
とても満足しています。
No.2
- 回答日時:
私なら、Lineのような動的手段は用いず、次の方法にします。
(1)レポートのデータで一意で、昇順になっている項目(以下、K)を
指定して、グループフッタを作り、横線を置く。
(2)レポートの内部プログラム
Dim 最大行数 As Long
Dim 行数 As Long
Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
行数 = 0 '行数カウンタをクリア
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then
'初回フォーマット時に行数/ページを求めておく
If Me.Page = 1 Then
最大行数 = 最大行数 + 1
End If
End If
行数 = 行数 + 1 '現在の行位置を更新する
End Sub
Private Sub グループフッター0_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then Exit Sub
'ページ内の最終行でなければ、このセクションを生成しない。
If 行数 < (最大行数 - 1) Then Cancel = 1
End Sub
考え方としては以下の通りです。
(1)Me.Pages = 0
全ページ数を求めるため、一通り明細行をFormatしますが、その途中
ではPagesが確定していないので0になっています。
(2)Me.Page = 1
1ページ目で何回Formatされるか数えます。これが最大行数です。
実際はFormatした後で、ページをはみ出すかどうかがチェックされ、
はみ出さなければPrintされ、はみ出せばPrintされません。
従って、カウントした値は実際はページ当たりの行数+1です。
(3)If 行数 < (最大行数 - 1) Then Cancel = 1
行数(ページ内の行位置)が最終行位置でなければ、フッタの生成を
キャンセルします。このセクションにある線も作成されません。
上記条件以外(最終行)の場合はフッタの生成をキャンセルしない
ので、このセクションにある線も作成されます。
但し、フッタが線だけ(高さが非常に低い)とした時の考え方です。
最大行数を数えている間はフッタはキャンセルされないので、
「はみ出し」のチェックはフッタ込みで調べられます。実際のFormat
では最終行だけフッタが出るので、キャンセルされたフッタの高さの
合計が明細行1行分の高さ以上ですと、「最終行」の判断を間違う
可能性があります。
フッタが作成されるかどうかで、ページ当たりの行数が変わる
この回答への補足
教えていただいた通り試してみました。
ですが…どうもうまく行かず…。
詳細_FormatのMe.Pagesをデバッグにて確認したところ
0のまま終わって印刷プレビュー画面になってしまいました。
そのため、グループフッター0_Formatの If 行数(最大行数-1) Then を
通っていませんでした。
考慮すべき点があったら助言いただければ嬉しいです。
丁寧にありがとうございます!!
今Access環境がないので明日挑戦してみます。
Pages, Pageにこんな特性があるとは思っていませんでした。
勉強になります。。
また明日報告させていただきます。
No.1
- 回答日時:
直線を描画する契機としては次のタイミングが使えます。
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages <> 0 Then
'★ここで Line メソッドを使う。
End If
End Sub
詳細_Format使ってみました!
Printよりいいですね。ありがとうございます。
質問の説明が大分抜けてました。。すいません。
詳細_Format等で、
前ページの最終レコードに横線引けたら理想なのですが…。
ページの最終行を取得する方法として下記を考えました。
※元データは並び順で任意の連番を持たせています
※印刷時拡張をONにしています
(1)ページフッダ
[グローバルなページ最終レコード更新フラグ] = TRUE
(2)詳細フォーマット時
IF [グローバルなページ最終レコード更新フラグ]= TRUE THEN
1つ前のレコードを最終レコード判断し、印刷用ワークTBLのフラグを更新
[グローバルなページ最終レコード更新フラグ]= FALSE (リセット)
(3)全件読み込んで印刷用ワークTBLのフラグを更新
(4)再出力
詳細フォーマット時
IF 印刷用ワークTBLのフラグ = TRUE THEN
LINEメソッドにて下線を引く
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) Excelであるシートだけ印刷できない 1 2022/04/01 09:04
- Excel(エクセル) 【Excel】エクセルの1シートが2枚に分割されてしまうので印刷プレビューを押して閉 4 2022/12/13 13:12
- Visual Basic(VBA) VBAで不特定枚数印刷をしたいです。 4 2022/08/02 07:30
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- フリーソフト Word?で作成された書類をLibreOffieで印刷しようとすると2ページになってしまう??? 3 2023/03/24 15:18
- Excel(エクセル) エクセルの罫線が印刷できない 4 2023/02/04 10:48
- ノートパソコン ページ番号の入れ方について 3 2023/02/16 17:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
Excel97 指定した行だけマク...
-
Excel 別ブックから該当データ...
-
Access2003レポート:最終ペー...
-
数値に見えるものはすべて数値...
-
Excelマクロの転記について
-
エクセルで空白行を削除する ...
-
エクセルのVBAで指定した行数の...
-
[EXCEL VBA]指定した文字と文字...
-
縦型カレンダーを横型にできま...
-
excel データを2行づつコピー
-
ExcelVBA特定の列にデータがあ...
-
エクセルで階層図を作る方法
-
【VBA】条件に一致しない行を削...
-
EXCEL マクロで下から10行目ま...
-
Excelで、マウスで範囲を選択し...
-
Excel VBAでオートフィルタで抽...
-
エクセルVBAで3つ以上の複...
-
VBAでの重複データに色付け
-
エクセルマクロでグループごと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
Excel VBAでオートフィルタで抽...
-
数値に見えるものはすべて数値...
-
VB.net
-
列から特定の文字列検索→該当以...
-
エクセルで空白行を削除する ...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
【VBA】条件に一致しない行を削...
-
各個体に対する平均値の自動計...
-
エクセルのVBAで指定した行数の...
-
EXCEL VBAでA列にある空白行よ...
-
VBAでの重複データに色付け
-
空白を複数行一気に挿入するには?
-
エクセルで階層図を作る方法
-
vbaエクセルマクロについて she...
-
【至急】Excel 同一人物の情報...
-
Excel97 指定した行だけマク...
おすすめ情報