VBAでクエリを作成・削除する方法です
今回はテーブルからクエリを作成してその内容をエクセルにエクスポート、そして作成したクエリを削除をします。
VBAの記述は各動作別にプロシージャに分けていますが、一つのプロシージャにまとめて、一連の動作にしてもらっても大丈夫です。
■使用するテーブル
適当に作ったマスタテーブルを例にします。
■早速ですがVBAの記述内容となります
Sub クエリ作成()
Dim Qdf As QueryDef
Dim SQL As String
SQL = "SELECT 名前,出身,年齢 FROM マスタテーブル"
Set Qdf = CurrentDb.CreateQueryDef("Q_名簿", SQL)
Set Qdf = Nothing
End Sub
Sub エクセルエクスポート()
Dim TemplateSheet
TemplateSheet = "Q_名簿"
Dim MyWSH As Object
Dim myDeskTopPath As String
Set MyWSH = CreateObject("WScript.Shell")
myDeskTopPath = MyWSH.SpecialFolders("Desktop") & "\" & "名簿.xlsx"
DoCmd.TransferSpreadsheet acExport, 10, TemplateSheet, myDeskTopPath, True, "シート"
End Sub
Sub クエリ削除()
Dim DB As DAO.Database
Set DB = CurrentDb
DB.QueryDefs.Delete "Q_名簿"
Set DB = Nothing
End Sub
■①クエリを作成します
マスタテーブルをSQL文で表にして、Q_名簿というクエリを作成しています。
Sub クエリ作成()
Dim Qdf As QueryDef
Dim SQL As String
SQL = "SELECT 名前,出身,年齢 FROM マスタテーブル"
Set Qdf = CurrentDb.CreateQueryDef("Q_名簿", SQL)
Set Qdf = Nothing
End Sub
■②作成したクエリをエクセルとしてエクスポートします
作成したクエリをそのままデスクトップ上にエクセルにエクスポートします。エクセルの名前を、名簿.xlsxとし、シート名をシートとして作成します。
Sub エクセルエクスポート()
Dim TemplateSheet
TemplateSheet = "Q_名簿"
Dim MyWSH As Object
Dim myDeskTopPath As String
Set MyWSH = CreateObject("WScript.Shell")
myDeskTopPath = MyWSH.SpecialFolders("Desktop") & "\" & "名簿.xlsx"
DoCmd.TransferSpreadsheet acExport, 10, TemplateSheet, myDeskTopPath, True, "シート"
End Sub
デスクトップ
エクセル
■③クエリを削除します
作成したQ_名簿クエリを削除して処理を終了します。
Sub クエリ削除()
Dim DB As DAO.Database
Set DB = CurrentDb
DB.QueryDefs.Delete "Q_名簿"
Set DB = Nothing
End Sub
■最後に
作成したクエリは今回エクスポートしましたが、他に印刷の元データにするなどにも利用出来ます。用途によっていろいろ修正変更が必要となりますが、余分なデータを常駐させずにファイルを軽量化してみるのも良いかもしれませんね。