1

Microsoft OLE DB Provider for Jet を使用して、VBA を使用して Excel のスプレッドシートでクエリを実行しています。保存されていないブックで次のコードを実行する方法はありますか?

たとえばActiveWorkbook.FullName、ブックが一度も保存されていない場合は、"Book1" が返されます。その場合、データ ソースはパスがアクティブ ディレクトリであると想定し、ファイルが保存されていないためエラーになります。

Excel 一時ファイルを Jet のデータ ソースとして使用する方法はありますか? これをテストしたいのですが、Excel 一時ファイルのパスと名前を返す方法さえわかりません。

Public Sub LocalJetQuery()

    Dim objStartingRange As Range
    Dim objConnection As New ADODB.Connection
    Dim objRecordset As New ADODB.Recordset

    Dim strDSN As String
    Dim strSQL As String

    Set objStartingRange = Application.Selection

    If CLng(Application.Version) >= 12 Then
        strDSN = "Provider=Microsoft.ACE.OLEDB.12.0;" _
        & "Data Source=" & objStartingRange.Worksheet.Parent.FullName & ";" _
        & "Extended Properties=""Excel 12.0 Xml;HDR=No;IMEX=1"";"
    Else
        strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;" _
        & "Data Source=" & objStartingRange.Worksheet.Parent.FullName & ";" _
        & "Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
    End If

    strSQL = "SELECT * FROM [" & objStartingRange.Worksheet.Name & "$];"

    objConnection.Open strDSN
    objRecordset.Open strSQL, objConnection

    Application.Workbooks.Add(xlWBATWorksheet).Sheets(1).Cells(1, 1).CopyFromRecordset objRecordset

End Sub

ありがとう!

4

1 に答える 1