はじめに
ACCESSでレポートを出力する際に並べ替えを行う場合、VBAを利用すると簡単に行う事ができます。
動的に設定できるため同じレポートをいくつも作らなくて良いのでとても便利なのですが、先日少しハマりましたのでメモ。
まずVBAでレポートを出力する記述
レポート出力フォームのボタンをクリックしたときのイベントプロシージャ
Private Sub レポート出力_Click() Dim stDocName As String Dim strWhere As String Dim strSortKey As String strDocName = "出力レポート" strWhere = "入社年 = #2019/04/01#" Select Case cboSortKey.Value Case "フリガナ" strSortKey = "フリガナ" Case "社員番号" strSortKey = "社員番号" Case "生年月日" strSortKey = "生年月日" Case Else strSortKey = "フリガナ" End Select DoCmd.OpenReport stDocName, acPreview, , strWhere, , strSortKey DoCmd.Maximize End Sub
strDocName : レポート名
strWhere : フィルター(絞り込みの条件)
strSortKey : 並べ替えキー
DoCmd.OpenReport でレポートを開くときに並べ替えキーをパラメータとして渡します。
レポートを開くときのイベントプロシージャ
Private Sub Report_Open(Cancel As Integer) If Len(Me.OpenArgs) > 0 Then 'レポートの並び順を設定 Me.OrderBy = Me.OpenArgs 'レポートの並べ替えを実行 Me.OrderByOn = True End If End Sub
DoCmd.OpenReport でレポートを開くときに渡されたパラメータは、Me.OpenArgsで受け取れます。
ハマった事象と解決法
レポートを開くとき OrderBy に並べ替えキーを設定することで並び変わるはずなのですが、何故かソートされません。
以前はソートされていたと思うのですが、先日確認したら動かない事に気がつきました。
原因が何なのかいろいろ確認してみたら、レポートのデザイン時に設定できる「並べ替え/グループ化の設定」が原因でした。
※レポートのデザイン時に右クリックすると表示されます。
ここで設定されている並べ替えを解除したら並べ替えが上手く機能するようになりました。
どうやらレポートデザインの並べ替え設定が優先されるようです。
※ACCESS2010、2013、2016で確認しました。