EXCELへ出力、汎用モジュール (AccessVBA)

SQLとパスを渡してエクセルへ出力する関数。
オートフィルターもパラメーターにて設定可能。
transferspledsheetが嫌いな人はコピペして使ってください。

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:=STRPW

wkb.Close SaveChanges:=False 'Excelへの変更保存をキャンセル

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

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

'終了通知
'F_MSGBOX ("Export has done!")

ex_output = True

End Function

※当ソースコード著作権フリーですが、このコードの使用によって生じたいかなる損害に対しても責任を持ちません。