Есть ли способ использовать OLE DB Provider для Jet на несохраненной книге Excel? - PullRequest
1 голос
/ 09 января 2010

Я работаю с поставщиком OLE DB для Jet для выполнения запросов к электронным таблицам в Excel с использованием VBA. Есть ли способ выполнить следующий код на несохраненной книге?

Например, 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

Спасибо!

1 Ответ

0 голосов
/ 31 января 2010

Нет. Так же, как говорит Дэвид Фентон в комментариях.

...