【Access】 SQLをエクセルに出力する関数

コピペすれば使えるモジュールをがちゃがちゃと作っているんですが、そのうちのひとつとしてエクセルに出力する汎用モジュールの公開。
Excelオブジェクトなどの参照設定は一切不要です。引数としてSQL,ファイルのフルパス、オートフィルタのONをTrueかfalseで渡します。

Function ex_output(SQL As String, file_name As String, A_fil As Boolean)
'SQLをエクセルに出力する関数


Dim cn As New ADODB.Connection
Dim ars As New ADODB.Recordset
Dim rs As ADODB.Recordset
Dim xls As Object
Dim wkb As Object
Dim mysheet As Object
Dim IDX As Long

Set cn = CurrentProject.Connection
Set xls = CreateObject("Excel.Application")
Set wkb = xls.Workbooks.Add
Set mysheet = wkb.Worksheets(1)
        
        
'rs.Open SQL, cn, adOpenKeyset, adLockReadOnly
 Set rs = cn.Execute(SQL)
'列見出しを書き出す
For IDX = 1 To rs.Fields.count
     '列名にスペースが入っているものを書き出すためのReplace
    mysheet.cells(1, IDX).Value = Replace(rs.Fields(IDX - 1).Name, ";nbsp;", " ")
    mysheet.cells(1, IDX).Interior.ColorIndex = 20
    
Next

    mysheet.Range("A2").CopyFromRecordset rs

'オートフィルターをつける
If A_fil = True Then
    mysheet.Range("A1").AutoFilter
End If

'列幅を整える
For IDX = 1 To rs.Fields.count
      
    mysheet.Columns(IDX).AutoFit
    
Next

wkb.SaveAs FileName:=file_name, Password:="password"
wkb.Close SaveChanges:=False 'Excelへの変更保存をキャンセル

xls.Quit 'Excel終了
xls.DisplayAlerts = True 'メッセージの復旧

'オブジェクトの開放
Set wkb = Nothing
Set xls = Nothing
rs.Close: cn.Close
file_name = ""

'終了通知
'msgbox "Export has done!"

ex_output = True

End Function