やったこと
クエリをエクスポートに使う際、パラメータ付クエリだとできなかったので、
特定の箇所のみクエリを直接変更して使いたいと思い、以下のようにできました。
Sub ReplaceSQLString()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim originalSQL As String
Dim newSQL As String
Dim findStr As String
Dim replaceStr As String
' 現在のデータベースを取得
Set db = CurrentDb()
' 既存のクエリ "MyQuery" を開く
Set qdf = db.QueryDefs("MyQuery")
' 現在のSQL文を取得
originalSQL = qdf.SQL
' 置換する文字列を設定
findStr = "OldValue" ' 置換対象の文字列
replaceStr = "NewValue" ' 置換後の文字列
' SQL文の文字列を置換
newSQL = Replace(originalSQL, findStr, replaceStr)
' 置換されたSQL文をクエリに設定
qdf.SQL = newSQL
' 変更を保存してクエリを閉じる
qdf.Close
Set qdf = Nothing
' クエリ結果を別DBへエクスポート
DoCmd.TransferDatabase acExport, "Microsoft Access", "DBのフルパス", acTable, "MyQuery", "出力テーブル名", False
' 既存のクエリ "MyQuery" を開く
Set qdf = db.QueryDefs("MyQuery")
' 実行後、元のSQL文に戻す
qdf.SQL = originalSQL
' 変更を保存してクエリを閉じる
qdf.Close
Set qdf = Nothing
Set db = Nothing
End Sub
やってみてわかったこと
- 実際はエクスポート先が動的でない場合は、エクスポート先のテーブルが存在したら削除してからエクスポートしないといけない。
- フォームを作ってたので置換するよりもこちらでフォームと連動するようにクエリにSQLパラメータ指定してる方がスマートだった