MSAccessのVBAで印刷時の並べ替えを制御する方法

このQ&Aのポイント
  • MSAccessのVBAを使用して、印刷時の並べ替えを制御する方法について教えてください。
  • 現在、同じレポートをコピーして、並べ替え/グループ化の設定をそれぞれ設定した複数のレポートを作成し、指定された印刷順の設定のしてあるレポートを印刷するようにしていますが、レポートのレイアウトを変更した場合には、それぞれのレポートを修正する必要があります。フォームのようにVBAから印刷順序を変更できる方法を教えてください。
  • MSAccessのVBAを使って、レポートの印刷順序を動的に変更する方法について教えてください。
回答を見る
  • ベストアンサー

MSAccessのVBAで印刷時の並べ替えを制御する方法

お世話になっております。 レポートについての質問ですが、 複数の印刷順で同じ出力データを印刷したいのですが、 現在、同じレポートをコピーして、 並べ替え/グループ化の設定をそれぞれ設定した複数のレポートを作成し、 指定された印刷順の設定のしてあるレポートを印刷するようにプログラムしています。 レポートのレイアウトを変更した場合、 コピーしてあるそれぞれのレポートを修正しなければならず不便です。 フォームのようにOrderBy等の設定で並べ替えが変更できるように、 レポートもVBAから印刷順序を変更できるようにしたいのですが、教えていただけないでしょうか? よろしくお願いいたします。

  • tiga-
  • お礼率77% (170/219)

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

  • ベストアンサー
noname#22222
noname#22222
回答No.8

s_husky です。 コピーミスでした。 Private Sub コマンド_在庫一覧プレビュー_Click()   DoCmd.OpenReport "在庫一覧", acViewDesign, , , acHidden   With Reports("在庫一覧")     .GroupLevel(0).Properties(0) = "小枝"  ' Field名,式     .GroupLevel(0).SortOrder = False     .GroupLevel(0).GroupOn = 1     .GroupLevel(0).GroupInterval = 1     .GroupLevel(0).KeepTogether = 2   End With   DoCmd.Close acReport, "在庫一覧", acSaveYes   DoCmd.OpenReport "在庫一覧", acViewPreview End Sub

その他の回答 (7)

noname#22222
noname#22222
回答No.7

s_huskyです。 Private Sub コマンド_在庫一覧プレビュー_Click()   DoCmd.OpenReport "在庫一覧", acViewDesign, , , acHidden   With     Reports("在庫一覧").GroupLevel(0).Properties(0) = "小枝"  ' Field名,式     Reports("在庫一覧").GroupLevel(0).SortOrder = False     Reports("在庫一覧").GroupLevel(0).GroupOn = 1     Reports("在庫一覧").GroupLevel(0).GroupInterval = 1     Reports("在庫一覧").GroupLevel(0).KeepTogether = 2   DoCmd.Close acReport, "在庫一覧", acSaveYes   DoCmd.OpenReport "在庫一覧", acViewPreview End Sub ※一応、テスト済みです。

noname#60992
noname#60992
回答No.6

印刷順に並べたクエリとレポートを2個ずつ作るのが一番早いかな。 いったんテーブルに書き出してもよいけれど、結局改ページも書き直さなくてはいけないし。 

tiga-
質問者

お礼

ありがとうございます。 ただ、皆さんの回答は、クエリ等による並べ替えで、私のように、レポートのデザインにある機能「並べ替え/グループ化」で並べ替え・グループ化・同一ページ印刷(改ページ制御)等を設定していないようです。 「並べ替え/グループ化」を設定すると、クエリ等のソート順は無視され、「並べ替え/グループ化」の設定内容が優先されます。 クエリだけでは改ページを制御できません。 ちなみに私の場合、グループヘッダーの改ページプロパティに「カレントセクションの後」を設定しています。 (グループヘッダに何もオブジェクトをおかないで「カレントセクションの後」を設定すると、そのグループが印刷された後、改ページが発生します。最初グループフッタ(下の方)に設定していたのですが、そうすると必ず最後に白紙のページが1ページ印刷されてしまいします。)

noname#22222
noname#22222
回答No.5

s_husky です。 別の質問への答えです。 ヒントにはなると思います。 Private Sub コマンド_在庫一覧プレビュー_Click()   DoCmd.OpenReport "在庫一覧", acViewDesign, , , acHidden   Reports("在庫一覧").RecordSource = "Select * from 在庫一覧 Order by 小枝"   DoCmd.Close acReport, "在庫一覧", acSaveYes   DoCmd.OpenReport "在庫一覧", acViewPreview End Sub 一度、デザインでレポートを開き、 (1)レコードソースを指定する。 又は (2)Order By を指定するか。 その後、レポートを開く。 これで、ソート順位を制御できます。

tiga-
質問者

お礼

ありがとうございます。 私がイメージしている方法に近いですが、「並べ替え/グループ化」を設定して、保存終了した後、レポートを開きたいのですが。 よろしくお願いいたします。

noname#22222
noname#22222
回答No.4

s_husky です。 私は、ややこしいやり方は嫌いです。 ですから、かかるケースでは一時テーブルを作成します。

  • hdump
  • ベストアンサー率27% (10/36)
回答No.3

やり方は2つ。 1、キー情報と昇順を持ったワークテーブルを作り、それを中心にレポートソースを作る。 2、レポートを最小化で起動し、Orderbyプロパティで昇順設定し、印刷を実行する。 私なら1のやり方でします。

tiga-
質問者

お礼

ありがとうございます。 しかし、ソートしたワークテーブルを作成しても、グループごとの改ページはどのように制御するのでしょうか? よろしくお願いいたします。

noname#22222
noname#22222
回答No.2

少し、確認です。 レポートA レポートB レポートC レポートD があって、 strReportList="レポートD,レポートB,レポートA,レポートC" という順序を既定した変数を用意し、 strRports()=Split(strReportList, ",") N=UBound(strRepots()) For I=0 To N  レポートプリントコード NExt I のレポートプリントコードの書き方に関する質問でしょうか? 換言すれば、Reportオブジェクトの操作コードの書き方を知りたいのでしょうか?

tiga-
質問者

補足

お世話様です。 ある顧客データがあり、会場コードと地区コードがあると考えてください。 フォーム上では、会場コード順・地区コード順のボタンがあり、どちらも同じデータを印刷しますが、印刷順序が違います。 しかも、並び順が違うだけでなく、印刷時に会場コード・地区コードが変わると改ページするように設定しています。 例 101 横浜会場     1 高橋     2 井上     3 佐々木 改ページ   102 川崎会場     1 佐藤     2 阿部 のような感じです。 改ページを設定する関係上、「並べ替え/グループ化」で会場コード・地区コードでそれぞれグループ化を設定したレポートを作成しています。 (単に印刷順序だけならいいのですが) お分かりいただけるでしょうか? よろしくお願いいたします。

noname#60992
noname#60992
回答No.1

レポートのレコードソースをクエリにすれば良いのではないでしょうか?

tiga-
質問者

補足

ありがとうございます。 しかし、レポートの場合は、クエリの「ORDER BY句」より「並べ替え/グループ化」が優先されます。 グループ化を設定したいので、クエリだけでは実現できません。 「並べ替え/グループ化」をVBAから制御できればと思っているのですが。

関連するQ&A

  • アクセス2007 VBA 並べ替え

    テーブル1のフィールド1にデータを入れ それを元に帳票フォームを作成しました。 フォームヘッダー部分に 昇順ボタンと降順ボタンを作り、 ボタンを押すごとに並び替えを行いたいのですが どのようなVBAコードを書けばいいのかわかりません。 命令分としては、 「フォームに表示されるテーブル1のフィールド1データの 昇順に並べ替える」です。 SQLを使う方法ではなく、 DocmdかacCmdを使う方法が希望です。 アクセスのヘルプの ----------------------------------------- Access 開発者用リファレンス Form."OrderBy/並べ替え" プロパティ ----------------------------------------- を見ると、 ----------------------------------------- 構文 式.OrderBy 式 Form オブジェクトを表す変数です。 ----------------------------------------- と書いてありますがこの式がわからないのでご教授よろしくお願いします。

  • Access 複数のレポートの印刷時のグループ化

    Accessでレイアウト等の違うレポートを複数作成しています。 その複数のレポートを担当者名で並び替えて一度に印刷したいと思っています。 現状はそれぞれのレポートを担当者名で並び替えて1レポートずつ印刷し、 人の手で振り分けている状態です。 一度に印刷するのは、マクロで設定するとして複数のレポートを印刷時に並び替える事は可能なのでしょうか? また可能な場合その方法をご教授願います。 よろしくお願いします。 ちなみにACCESS初心者で、VBAは調べて書けば簡単なものはなんとか動かせてるといった状態です。

  • Accessのレポートで「並べ替え/グループ化」の設定をVBAで行いたい

    Accessでレポート印刷をする際に、指定した並びで印刷を行う方法をご存じの方いらっしゃいましたら教えて頂けないでしょうか。 並びの例(指定月(5月)を降順の並びにしたい) 月   3月  4月 5月  6月 商品B 1,000 2,000 3,000   0 商品A 2,000 3,000 2,000   0 商品C 3,000 1,000 1,000   0 ※指定月は印刷毎に変化します ※商品の印字は詳細セクションで行います レポートオープンのイベントで Me.OrderBy = "5月 DESC" Me.OrderByOn = True としても指定の通りになりません。 レポートのデザインモードで「並べ替え/グループ化」を設定するとその通りの並びになるのですが、この設定をレポートのオープンイベントで自動的に行う事は可能でしょうか。

  • 【Excel VBA】複数範囲の並べ替えは可能でしょうか?

    【Excel VBA】複数範囲の並べ替えは可能でしょうか? Excel2003を使用しています。 CSVデータを元に作成された下記のような表があります。 A列…日付、B列…受注番号、C列…摘要(会社名・品名等)、D列…金額となっています。 6行目以下に上記の内容でデータが入力されていますが、会社ごとのデータ内で日付順に並べ替えをしたいのですが、VBAで複数の範囲を選択して、それぞれの範囲内での並べ替えは可能でしょうか?     A     B     C    D 6             ○○会社 7   1/20   123   AAA   1,000 8   1/15   120   BBB   2,000 9 10              計     3,000 11 12            ××会社 13 計の1行上と下は空欄行で、以下、会社名の後にデータが続くというパターンの繰り返しで数十社分あります。 Excelのデータ⇒並べ替えでは複数選択した状態での並べ替えはできないので、VBAで可能であればと思い、質問させていただきました。 よろしくお願いします。

  • Access2003 レポートレイアウトについて

    Access2003 レポートレイアウトについて Access初心者です。ご存知の方がいらっしゃいましたら教えて下さい。 レポートレイアウトについて フォーム上で請求書のデータ入力を行う際は、サブフォームの 請求内容の詳細を「昇順で並び替え」を行い項番(オートナンバー)の 若い番号順に並べ替えを行っていますが、レポートの印刷プレビューを 呼び出すと並び方が「降順」となり「昇順」に切替えることができません。 レポート上でサブフォームに入力した内容をオートナンバーの若い番号順「降順」 に並び替えをすることは可能でしょうか? フォームで並び替えを行ったとおりにレポートへ表示させるためにはどのように させると宜しいでしょうか?

  • XP付属、写真印刷ウィザードでの印刷順序の変更は?

    こんにちは どなたかお知恵拝借願います XP付属、「写真の印刷ウィザード」での一頁への複数毎印刷順序を 「123.jpg→124jpg→125.jpg→126.jpg」等のファイルネーム順又は 「2005/8/10→2005/8/11→2005/8/15」等の更新日付順(時間)に 印刷順序へ変更する事は可能でしょうか 一覧で全てチェックを付けて、複数毎又はインデックス印刷をすると 撮影順に並ばないので不便に感じます。 宜しくお願いします

  • accessのレポートの並べ替え条件

    こんにちわ。 いまaccess2000でレポートを作成しています。 そこでレポートの並べ替え条件(昇順/降順)を 呼び出し元であるフォームのある条件によって, 動的に変えたいと思い, レポートファイルのReport_Open()イベントで 下記のようにコーディングしました。 「 Me.OrderByOn = True If [グローバル変数] = "1" Then Me.OrderBy = " [ID] Desc " Else Me.OrderBy = " [ID] " End If 」 ところが実行すると上記の箇所が処理されているにもかかわらず, 並べ替え条件が正しく反映されません。 どうすれば並べ替え条件が正しく反映されるでしょうか? 教えてください。 宜しくお願いします。

  • エクセル VBAで印刷時に・・・

    いつも皆様にはお世話になっております。 今回はVBAで印刷する時に 用紙の指定をしたいのです。 現状の仕様として プリンタはCANONのLASERSHOT LBP-1810を使用しています。 増設カセットを1個付けております。 増設カセットとカセット1には両方ともA4が入っております。 通常の印刷では、カセット1のほうが優先に印刷されます。 この状況のときに、Sheet1では通常の印刷の様にカセット1から印刷で問題ないのですが、Sheet2を印刷する時に増設カセットから印刷させたいのです。 VBAで印刷させたいのはSheet2のみとなっております。 そういった形のVBAは組めるでしょうか? アドバイスの程宜しくお願いいたします。 ちなみに、コントロールパネルからのプリンタ設定を変更して通常印刷の設定を増設カセットにするのは諸事情があり出来ない状況となっておりますので宜しくお願いいたします。

  • ACCESS2000で、サブフォームのデータを並べ替えする方法は?

    アクセス初心者+αの者です。 メインフォームを開いた時に、サブフォームにはメインとのリンク項目に該当するデータをクエリから抽出し、表示するようになっています(データによっては複数件あり)。 データ抽出は出来てますが、データの表示順がうまく出来ません。サブフォームのレコードソースSQL文にOrderBy句で指定してもダメでした。 メインフォームの並べ替えプロパティが怪しいと思ってるのですが、どのように記述すれば良いのでしょうか?(VBAでもOKです) 並び替えしたい項目は、サブフォーム内に持ってます。 情報の不足もあるかもしれませんが、よろしくお願いします。m(__)m

  • ACCESS2000 VBAで印刷時にサブレポートのレコードソースを設定するには?

     フォーム画面にある複数の入力項目から検索条件文を作成、データを抽出してレポートに明細一覧を出力します。  親レポートはDoCmd.OpenReportのConditionで設定出来るのですが、そのレポートフッターにはサブレポートがあり、明細の小計や種別計、総合計を出力するのですが、このサブレポートのレコードソース(またはフィルタ)を設定するにはどうすれば良いのでしょうか?  ・サブレポートのオープン時にMe.Recordsource="SELECT * FROM …" だとエラーになり、オープン時には指定できないとのことでした。 親レポートとは親子関係もなく、使用するクエリーも別です。 VBAで設定するのは難しいのでしょうか?よろしくお願いします。

専門家に質問してみよう