ソースコードの説明
Access VBAで参照クエリを実行した結果をCSVファイルに出力するソースコードをご紹介します。
テストはAccess2003で行っています。
8行目でCSVファイルの出力先とCSVファイルの名前を指定しています。
Open strFolder & "C:\access\TestSample.csv" For Output As #lngFileNum
11行目で実行する参照クエリを指定しています。
Set rst = dbs.OpenRecordset("TestQuery") '実行する参照クエリを指定
14行目ではCSVファイルのヘッダー行を出力しています。
Print #lngFileNum, "社員番号,社員名,社員名カナ,部署,メールアドレス,入社年月,勤続年数,給与,登録日,登録者"
17、18行目で参照クエリの実行結果を出力しています。
Print #lngFileNum, !社員番号 & "," & !社員名 & "," & !社員名カナ & "," & !部署 & "," & !メールアドレス & "," & !入社年月 & "," & _
!勤続年数 & "," & !給与 & "," & !登録日 & "," & !登録者
VBAソースコード
Sub CSVExportSample()
Dim dbs As Database
Dim rst As Recordset
Dim lngFileNum As Long
lngFileNum = FreeFile()
'出力するCSVファイルの保存先を指定
Open "C:\access\TestSample.csv" For Output As #lngFileNum
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("TestQuery") '実行する参照クエリを指定
With rst
'CSVファイルのヘッダー行を出力
Print #lngFileNum, "社員番号,社員名,社員名カナ,部署,メールアドレス,入社年月,勤続年数,給与,登録日,登録者"
Do Until .EOF
'参照クエリ内を1行ずつCSVファイルに出力
Print #lngFileNum, !社員番号 & "," & !社員名 & "," & !社員名カナ & "," & !部署 & "," & !メールアドレス & "," & !入社年月 & "," & _
!勤続年数 & "," & !給与 & "," & !登録日 & "," & !登録者
.MoveNext
Loop
.Close
End With
Close #lngFileNum
End Sub
変数を参照するクエリを実行する場合の説明
フォーム上にあるテキストボックスなどに入力された値を参照している参照クエリの場合は上記のソースコードのままでは実行できないので、ソースコードを少し変更してパラメーターを参照できるようにします。
17~19行目でフォーム上にあるテキストボックスの値を取得できるようにしています。
.Parameters("[Forms]![F_MENU]![DateFromC]") = Forms![F_MENU]![DateFromC]
.Parameters("[Forms]![F_MENU]![DateToC]") = Forms![F_MENU]![DateToC]
.Parameters("[Forms]![F_MENU]![DateFrom]") = Forms![F_MENU]![DateFrom]
パラメーター参照用VBAソースコード
Sub CSVExportSample2()
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Dim lngFileNum As Long
lngFileNum = FreeFile()
'出力するCSVファイルの保存先を指定
Open "C:\access\TestSample.csv" For Output As #lngFileNum
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("TestQuery") '実行する参照クエリを指定
Set dbs = CurrentDb
With qdf
'フォーム参照パラメータ名にコントロールの値をセット
.Parameters("[Forms]![F_MENU]![DateFromC]") = Forms![F_MENU]![DateFromC]
.Parameters("[Forms]![F_MENU]![DateToC]") = Forms![F_MENU]![DateToC]
.Parameters("[Forms]![F_MENU]![DateFrom]") = Forms![F_MENU]![DateFrom]
Set rst = .OpenRecordset
End With
With rst
'CSVファイルのヘッダー行を出力
Print #lngFileNum, "社員番号,社員名,社員名カナ,部署,メールアドレス,入社年月,勤続年数,給与,登録日,登録者"
Do Until .EOF
'参照クエリ内を1行ずつCSVファイルに出力
Print #lngFileNum, !社員番号 & "," & !社員名 & "," & !社員名カナ & "," & !部署 & "," & !メールアドレス & "," & !入社年月 & "," & _
!勤続年数 & "," & !給与 & "," & !登録日 & "," & !登録者
.MoveNext
Loop
.Close
End With
Close #lngFileNum
End Sub