Access2003レポート:最終ページへ移動

このQ&Aのポイント
  • Accessにてレポートを作成し、最終ページへ移動する方法についての質問です。
  • 印刷プレビューの最終行へ移動ボタンの動作を、VBAを使用して呼び出し元フォームから行いたいです。
  • また、印刷用のworkテーブルにページ最終行のフラグをアップデートし、フラグがある場合にレポートで横線を引く構想です。
回答を見る
  • ベストアンサー

Access2003レポート:最終ページへ移動

Accessにてレポートを作成しています。 印刷プレビューの[最終行へ移動]ボタンの動作を 印刷プレビュー呼び出し元フォームからVBAで行えませんでしょうか。 ※[印刷]ボタンを押下して遷移。 やりたい事は、ページの最後に横線を引くことです。 詳細_Printより、印刷用のworkテーブルに ページ最終行の場合はフラグをアップデートし、 再度レポートを作成してフラグのある場合横線を引く、という構想をしていました。 印刷が2ページに渡る場合、 2ページ目以降のレコードの詳細_Printのイベントは ページを移動させるまで発生しなかったため質問させていただきました。 縦・横線を条件付で結合等させて表示させたかったため、 詳細のlineメソッドを使って線を引いています。 また、質問内容が実現可能であれば 索引作成にも使用したいと思っています。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答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

mini0524
質問者

お礼

ありがとうございます! 教えていただいた内容で下線を実現することができました! ページあたりの行数を配列に持たせ 最終ページは結局、Me.Page = Me.Pagesの時のフッタ判断を If 行数 < (最大行数) にしてラインを生成しました。 レコードソースを変更し、ということもできるのですね。 今回はとても勉強になりました。 詳しくありがとうございました。 ただ、今回の帳票に関しては・・・ 詳細_Printにて、前の明細と同じであった場合 txt項目A.visible = Falseにするという設定を行っていました。 ※txt項目A は印刷時拡張 ON そのため、初回フォーマット時には当然 txt項目A.visible = Falseを考慮したページカウントをしないため ページあたりの最大行数、及び、総ページ数が正しく取得できていませんでした。 表示させたいレイアウトがグループで表現できなかったため 上記手段を取ったのですが色々無理させすぎですね。。 もし上記設定をふまえた最大行数の取得が可能であれば ご教授いただきたいとは思いますが、 今回はご丁寧にありがとうございました。 とても満足しています。

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答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行分の高さ以上ですと、「最終行」の判断を間違う 可能性があります。 フッタが作成されるかどうかで、ページ当たりの行数が変わる

mini0524
質問者

お礼

丁寧にありがとうございます!! 今Access環境がないので明日挑戦してみます。 Pages, Pageにこんな特性があるとは思っていませんでした。 勉強になります。。 また明日報告させていただきます。

mini0524
質問者

補足

教えていただいた通り試してみました。 ですが…どうもうまく行かず…。 詳細_FormatのMe.Pagesをデバッグにて確認したところ 0のまま終わって印刷プレビュー画面になってしまいました。 そのため、グループフッター0_Formatの If 行数(最大行数-1) Then を 通っていませんでした。 考慮すべき点があったら助言いただければ嬉しいです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

直線を描画する契機としては次のタイミングが使えます。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If Me.Pages <> 0 Then     '★ここで Line メソッドを使う。 End If End Sub

mini0524
質問者

お礼

詳細_Format使ってみました! Printよりいいですね。ありがとうございます。 質問の説明が大分抜けてました。。すいません。 詳細_Format等で、 前ページの最終レコードに横線引けたら理想なのですが…。 ページの最終行を取得する方法として下記を考えました。 ※元データは並び順で任意の連番を持たせています ※印刷時拡張をONにしています (1)ページフッダ  [グローバルなページ最終レコード更新フラグ] = TRUE (2)詳細フォーマット時  IF [グローバルなページ最終レコード更新フラグ]= TRUE THEN  1つ前のレコードを最終レコード判断し、印刷用ワークTBLのフラグを更新 [グローバルなページ最終レコード更新フラグ]= FALSE (リセット) (3)全件読み込んで印刷用ワークTBLのフラグを更新 (4)再出力 詳細フォーマット時  IF 印刷用ワークTBLのフラグ = TRUE THEN LINEメソッドにて下線を引く

関連するQ&A

  • Accessのレポートでページセレクタが動作しない

    初めての質問をさせて頂きます。 Access2016のレポートに関して質問させて頂きます。 レポートウィザードを使用して表形式のレポートを作成しようとしたのですが項目数が多いため作成エラーになってしまい単票形式でレポートを作成しました。 作成時に使用したクエリでは条件に従い複数レコードを抽出するようにしています。 項目を横一列にして最大表示行数を30行(30行目で改ページ)にしています。 上記で作成したレポートをフォームと親子関係にしてフォーム上にレポートプレビューを表示するようにしました。 ここまでは想定通りに動作をするのですがレポートプレビューの時に表示されるページセレクタで問題が発生しました。 矢印ボタンで次ページ移動、前ページ移動、最終ページ移動、最前ページ移動、現在ページの表示は問題ないのですが、直接ページ数を入力すると何故かページ数でなくレコード数として扱われ行の先頭に指定した数値のレコードから改ページまでが表示されてしまいます。また印刷ダイアログでページ指定をしても同様の現象が発生してしまいます。 レポートのグループ化や並び順などの条件はすべて削除しています。 レポートウィザードで単票形式で作成したのが問題ではないかと予測しているのですが、レポートのプロパティでは単票形式、表形式、帳票形式の選択肢がないのでどのようにすれば解決できるのか見当もつかない状態になってしまっています。 解決方法を知っていらっしゃる方がおられましたら是非お知恵をかして頂ければ幸いです。 どうか宜しくお願いいたします。

  • ACCESS レポートの改ページについて教えて下さい。

    レポートを作っているのですが、詳細のセクションで改ページを「カレントセクションの後」に設定しています。 すると詳細が一行だけであれば問題なくレポートが出ますが、 2行以上あると2行目以降が別のページに印刷されてしまいます。 レポートはこのようになっています。 ページヘッダー: ========= 見出し(会社名) ========= お客様氏名・住所・生年月日など _______ 日付/内容/金額 _______ 詳細: 日付/内容/金額 です。 これで各お客様の来店情報が出るようにしたいのですが、上に書いたように詳細がひとつなら、次ページに進めば次のお客様へとレポートは進むのですが、2行以上あれば2行目だけ次ページに印刷されてしまいます。 1人の情報を1ページにまとめるにはどうすればよいか教えて下さい。(20行くらい入るスペースは用紙に残っています)宜しくお願いします。

  • ACCESS2000のレポートの改ページ

    ACCESS2000のレポートで得意先でグループ化してあり30行になったら 改ページすると言うことをやっているのですがレポートのプレビューを見ると 1ページ目はしっかりでているのですが2ページ目が白紙3ページ目は正しくでています。後、得意先データが30データなくても空打ちで改ページしたいのです。 どうやったら改ページがうまくいくでしょうか? レポートはメインレポートにページヘッダーが有り詳細にサブレポートをもってきています。あとページフッターがあります。 どなたかおわかりの方お教え願えないでしょうか?

  • Accessレポートでの改ページ

    Accessのレポートで、明細行を必ず8行ずつ印刷したいのです。 8行に満たない場合は、8行になるまで空白行を加えます。 そして、ヘーダー部に明細の金額合計があり、最終ページはヘッダー部を含めて8行にしたいので、明細行が7行となります。 とりあえず↓ 印刷する明細行数を常に8の倍数になるように空白行を作り、8行ごとに改ページしてみました。 しかし、最初の1ページ目はちゃんと8行で改行されますが、2ページ目からは、1行ずつしか印刷されません。 例えば、明細レコードが9レコードの場合、空白行含めて15行の明細をつくりました。 それを以下のプログラムで実行すると、9レコード目から15レコード目までは、1ページに1行ずつしか印刷されません。 どうすればいいのでしょうか? どなたかよろしくお願いします。 ***************************************************** Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer) '印刷行の初期化 cntPage = 0 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) '印刷行を更新 cntPage = cntPage + 1 If cntPage = 8 Then '改ページ Me.Section(acDetail).ForceNewPage = 2 '印刷行の初期化 cntPage = 0 End If

  • ACCESSのレポートについて

    ACCESSでフォームから印刷ボタンを押すとレポートの印刷プレビューが表示されるという簡単なアプリケーションを作成したんですが、レポートの余白・向きを保存→アクセスを終了→アクセスを起動→レポートを表示→レポートを閉じる→レポートを表示という操作をすると、ページ設定で設定し保存した余白・ページの向きが元に戻ってしまいます。どうすればちゃんと保存できるのでしょうか? ちなみにDoCmd.OpenReport "hoge", acViewPreviewでレポートを表示させてます。

  • ACCESS2000レポートを一定の行数で改頁

    ACCESS2000を使っています。 メインレポートの詳細部にサブレポートがあり、サブレポートの詳細部を 決まった行数で印刷したいのですが、いい方法はありませんか? 今は、メインレポートのページヘッダ・フッタの高さの調整で対処しています。 よろしくお願いします ┌----------------------┐ |メインレポート ページヘッダ        | ├----------------------┤ |メインレポート 詳細部           | |┌--------------------┐|  ||サブレポート グループヘッダ      ||  |├--------------------┤| ||サブレポート◇詳細部     (1行目)||┐ ||               (2行目)||├この行数を ||               (・・・)|||固定にしたい ||               (9行目)|||例では10行 ||              (10行目)||┘ |├--------------------┤| ||サブレポート グループフッタ      || |└--------------------┘| ├----------------------┤ |メインレポート ページフッタ        | └----------------------┘

  • アクセス97でのレポート印刷について

    アクセスでレポートを作成しました。作成している自分のPCでは印刷プレビューで2ページあり、実際印刷されるのもプレビュー通り2ページです。でも、別のPCに配布してそちらのPCで同じレポートをプレビューし印刷すると、プレビューは2ページ、印刷は空欄が20ページ印刷されてしまいます。どうしてですか?(レコードが終わっても罫線をページの最後まで印刷するように作ってあります、これが原因?) 以前の質問の回答に最適化すると余白がデフォルトに戻ってしまう・・・など、アクセスの不具合が書き込まれていましたが、当方のこの現象もそのようなことなのでしょうか?プリンタによって?ですか? 何か対策はありませんか?このアプリケーションはこれから他の部署にも配布する予定ですので、ほんとに困っています。 教えてください。お願いします。

  • Access2007 レポート印刷

    Access2007 レポート印刷 レポートをウィザードで作成するときに、 「すべてのフィールドを1ページ内に収める」にしているのに、 印刷プレビューで見ると、収まっていません。 これは、縮小して収めてくれるという意味ではないのですか? ※レポートヘッダーで改ページをしています。  2ページ目が明細になっていますが、  2ページ目の最後のフィールドが次のページになってしまいます。

  • accessのレポートのページ削除

    accessが全然わからなくて困っています。 1ページしかいらないレポートなのに、印刷をすると2ぺージ目にヘッダーの色だけが印刷されて出てきます。 プレビューで見ると、2ページ分表示されます。 この、いらない2ページ目を削除したいのですが、どうすればいいのでしょうか? よろしくお願いします。

  • エクセルでページ番号へ移動。

    エクセル2000でページ番号へ移動 エクセル2000です。 改ページプレビューでハイパーリンク用のボタンで希望するページ番号へジャンプすることは可能でしょか?(ハイパーリンクの編集で可能?)ハイパーリンク用のボタンに「1ページへ」、「2ページ」、 「3ページ」、「4ページ」。そこをクリックで。 例えば、行3から10は印刷ページ指定なし。行11から20が1ページ。行22から30が2ページ。 行40から50が3ページとしますが、ページ番号は印刷範囲目的によって変更します。 よろしくお願いします。

専門家に質問してみよう