AccessVBAメモ

AccessVBAで作ったサンプルコード集

AccseeVBA Excelエクスポート 決まったファイル名で上書き保存する

スポンサーリンク

AccessからエクスポートしたEXCELファイルが何のファイルだったか分からなくなってしまうのを避けるため、毎回決まったファイル名(一定のルールのもとで作成されたファイル名)をエクスポートする仕様を作ってみました。

 

繰返し同じ処理を行う可能性を考慮して、既に同じファイル名のEXCELファイルを作成している場合には上書き保存し、ない場合には新規で作成します。

 

既に同じファイル名のEXCELファイルを作成している場合、ファイルを開いていると上書き保存できないので、EXCELファイルを開いているかどうかのチェックを含めています。

 

EXCELファイルが開いているかチェックするためのコード参考サイト

ACCESSからExcelファイルが開いているか調べる | SugiBlog

 

以下、VBAの記述。

 

'------------------------------------------------------------------------------------------

Function transferXlsData

Dim db As Database

Dim rst As Recordset

Dim strSQL As String

Dim filename As String  'エクスポートするフルパスのファイル名

Dim filename1 As String '抽出期間を定義するためのサブネーム

Dim rc As Integer


Set db = CurrentDb

strSQL = "SELECT MIN([テーブル名].[日付]) AS 開始日, MAX([テーブル名].[日付]) AS 終了日 FROM [テーブル名];"

 

Set rst = db.OpenRecordset(strSQL,dbOpenSnapshot)

If Dcount("*","テーブル名") = 0 then

MsgBox "エクスポートするデータがありません。"

Exit Sub

End If

 

'抽出データの日付開始&終了をファイル名の一部としている

filename1 = Format(rst!開始日,"yyyymmdd") & "_" & Format(rst!終了日,"mmdd")

 

Accessファイルと同じフォルダへのエクスポート

 

filename = CurrentProject.Path & "¥エクセル出力データ_" & filename1 & ".xlsx"

 

If Dir(filename, vbDirectory) <> "" Then

Dim xlsApp As Object
Dim xlsbook As Object

Set xlsApp = CreateObject("Excel.Application")

Set xlsbook = xlsApp.Workbooks.Open(filename)

If xlsbook.readonly Then

MsgBox "エクセル出力データ_" & filename1 & "という名前のエクセルファイルが開いています。" & vbCrLf & _
"このファイルを上書きするので、一旦ファイルを閉じるか、開いているファイルを別の名前で保存して終了してください。"


xlsbook.Close
xlsApp.Application.Quit

Set xlsbook = Nothing
Set xlsApp = Nothing


Exit Sub

End If

xlsbook.Close
xlsApp.Application.Quit

Set xlsbook = Nothing
Set xlsApp = Nothing

 

'既に保存されているEXCELファイルを一旦削除する

Kill filename


End If

 

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12xml, "[テーブル名]",filname,"エクセル出力データ_" & filename1",1

rc = Dcount("*","テーブル名")

 

MsgBox rc & "レコードのデータをこのファイルと同じフォルダに出力しました。" & vbcrlf & _

"出力ファイル名:エクセル出力データ_" & filename1 & ".xlsx"

End Function

'---------------------------------------------------------------------------------------------------

以上、VBA記述終わり。

出力するフォルダ名を指定した方がいいかなと思いますが、フォルダ指定するのに1工程入ってしまうので、個人的にはAccessと同じフォルダへの自働出力を重宝しています。

※フォルダ名を指定する場合の参考サイト

www.accessclub.jp