VB6で下記のプログラムを書きました。メインのロジックの部分だけ掲載します。VBでACCESSの「A.mdb」接続し、CreateQueryDefで「テストクエリ」というクエリを生成し、そのクエリをエクセルファイルとしてエクスポートすることが目標です。
結果は「テストクエリ」は生成されますが、エクスポートされません。エラーメッセージなどは出ませんが、DoCmd.TransferSpreadsheetが実行されないようです。
もし「A.mdb」を立ち上げていると成功します。「A.mdb」を立ち上げずに行うことはできますでしょうか?
Dim DB As Database
Dim qdf As QueryDef
Dim strSQL As String
Set DB = OpenDatabase("C:\A.mdb")
strSQL = "SELECT ○○○;"
Set qdf = DB.CreateQueryDef("テストクエリ", strSQL)
DoCmd.TransferSpreadsheet acExport, 8, "テストクエリ", "C:\テストクエリ.xls", False, ""
DoCmdはAccessアプリケーションのオブジェクトだからです。
Option Explicit Const acExport = 1 Dim objAccess Dim qdf Dim strSQL 'Accessオブジェクトを作成します Set objAccess = CreateObject("Access.Application") objAccess.Visible = False objAccess.OpenCurrentDatabase("C:\A.mdb") 'DBオブジェクトを作ります Set objDB = objAccess.CurrentDb strSQL = "SELECT ○○○;" Set qdf = objDB.CreateQueryDef("テストクエリ", strSQL) objAccess.DoCmd.TransferSpreadsheet acExport, 8, "テストクエリ", "C:\テストクエリ.xls", False, "" 'MDBファイルを閉じます objAccess.CloseCurrentDatabase 'Accessオブジェクトの破棄 Set objAccess = Nothing
うすうす何か次元の違うところではまっている気がしていました。
「DoCmdはAccessアプリケーションのオブジェクト」で目が覚める思いです。
また完全なコードで感謝します。