Microsoft Access 掲示板

印刷プレビューを並べ替えで呼び出し

12 コメント
views
4 フォロー

またよろしくお願いします。
検索フォームに印刷コマンドボタンを配置しており、クリック時に下記の通り記しています。

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

[orderby]にはきちんと値がのっているようですが、(me.orderby="[性別]"となってます)
印刷プレビューするとこの通り並べ替えできていません。
R10_検索については、独自の並べ替え設定はしておらず、プロパティの「読み込み時に並べ替えを適用」を
はい、にしてもいいえ、にしても変化ないです。
コードがまちがってるかみてもらえまえんか?
よろしくお願いいたします。

aya
作成: 2021/02/27 (土) 16:00:20
通報 ...
1

レポートをデザインビューで開いて、リボンの「グループ化と並べ替え」をクリックして、グループ化や並べ替えが設定されていないか確認してください。そちらが設定されているとそれが優先されます。

2

ありがとうございます。それがレポート側で設定されていないんです。。。
よろしくお願いします。

3

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

だけでは並べ替えできないので、レポートを開く時のイベントで OrderBy を設定するコードが必要ですが、してますか。

4

はい、しています。
整列というコマンドボタンがあってそこの更新後処理でやっています。
Private Sub option_整列方法_AfterUpdate()
OrderBy = "[性別] DESC"
OrderByOn = True

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderByの、
orderbyには(me.orderby="[性別]")という感じでちゃんとデータはわたっているようです。

5

レポートの「開く時」のイベントプロシージャで下記のようなコードを記述してますか。

Private Sub Report_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
        Me.OrderBy = Me.OpenArgs
        Me.OrderByOn = True
    End If
End Sub
6

いいえ。レポートのイベント欄には何にも記述していません。。。
何か変なことをどこかでしているはずですよね。レポートの並び替え設定は何も書いてなければ設定されてないですよね?
呼び出すときは値を渡してそうなんで不思議です。

7

勘違いされているようですが、
DoCmd.OpenReport の OpenArgs引数は単にレポートに値を渡すだけです。レポート側でその渡された値を使って何か処理をするためのものです。プログラマーがその処理を書かなければ何も起こりません。
並べ替えをしたいのなら、前回の回答のコードが必要です。

8

ありがとうございます。
docmd.openreportでは、openargsは特にしてなくて書いた通り、下記の文になってます。
DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

ここのme.orderbyに値が入っています。

この文ではだめで、openargsをdocmd.openreportで指定しないといけないってことですか?
何度もすみません。よろしくお願いいたします。

9
hatena 2021/02/28 (日) 16:08:10 修正

繰り返しになりますが、レポートの「開く時」のイベントプロシージャに前回の回答のコードを記述する必要があります。

念のために手順を書いておきますと、

  • R10_検索」レポートをデザインビューで開く。
  • プロパティのイベントタブの「開く時」のドロップダウンリストから[イベント プロシージャ]を選択してビルドボタン[...] をクリックする。
  • VBAウィンドウが開き、下記のように既に記述されています。
Private Sub Report_Open(Cancel As Integer)

End Sub
  • これを下記のように修正します。
Private Sub Report_Open(Cancel As Integer)
    If Me.OpenArgs <> "" Then
        Me.OrderBy = Me.OpenArgs
        Me.OrderByOn = True
    End If
End Sub
  • レポートを保存して閉じます。

以上です。

10

ありがとうございます。
今の状態だと、開くときイベントに教えてもらったコードを書いても並び替えされません。
前述のとおり、呼び出す側には「DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy」
としか記述していないので、開くときにこのコードを記述する際はOpenArgsにも設定する必要がありますか?

12

できるはずです。どこか間違っているのだと思いますが、こちらからはそちらのファイルが見えませんので指摘できませんが、ちゃんと設定すればできるはずです。

まずは基本を理解してください。

DoCmd.OpenReport メソッド (Access) | Microsoft Docs

上記の説明を読んで理解できれば、

DoCmd.OpenReport "R10_検索", acViewPreview, , Me.Filter, , Me.OrderBy

このコードで OpenArgs が設定できていることが理解できると思います。
6番目の引数に設定した値が、レポートのOpenArgsプロパティに設定されます。

OpenArgsプロパティは値を受け取るだけなので、それを設定しても何も起こりません。
レポート側のイベントプロシージャでOpenArgsに代入された値を使って並べ替える処理を実行して、並べ替えることができます。

もう一度、内容を理解してそれぞれのコードやレポートの設定を見直してください。

どうしても、うまくいかない場合は、右のカラムの一番下の「ファイル送信フォーム」から現状のファイルを送ってください。それを見れば、間違いを指摘できると思います。

11

ごめんなさい!できました!!!
しっかりと読み返してやっと意味が理解できました。
無駄なやり取りをしてしまってすみませんでした。
根本的にOpenArgsを勘違いしていました!
両方でOpenArgsの設定が必要だと思っていて勝手に混乱していました。
もう一度勉強してみます。ありがとうございました!解決です。