• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MSAccessのVBAで印刷時の並べ替えを制御する方法)

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

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

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

  • ベストアンサー
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