#excel #vba #ms-access #ado
#excel #vba #ms-access #ado
Вопрос:
Я пытаюсь вставить результаты запроса access на лист в Excel.
Когда я запускаю следующий код, ничего не происходит. Никаких ошибок или предупреждений, просто ничего не вставляется. Однако, когда я запускаю тот же код, но использую таблицу вместо имени запроса, он успешно извлекает таблицу. Но когда я заменяю его именем запроса, он ничего не возвращает.
В прошлом я делал то же самое, но вместо вызова имени запроса я сохранял SQL-запрос в виде строки в макросе и вызывал запрос, ссылаясь на строку. Я пробовал это, и в этом случае это не сработало.
Запрос, который я пытаюсь извлечь, ссылается на другие запросы в виде таблиц, и я думаю, именно поэтому у меня возникают проблемы. Как я уже сказал, я много раз извлекал данные из Access с помощью этого кода, но смог сделать это только тогда, когда я ссылаюсь только на таблицы, а не на запросы.
Dim Con As ADODB.Connection
Set Con = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim iCols As Integer
Set Con = New ADODB.Connection
With Con
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open AccessDBPath
End With
Set rs = New ADODB.Recordset
rs.Open "query1", Con
Sheets("NAHV").Range("E2").CopyFromRecordset rs
Я попытался заменить rs.Откройте строку с командой Execute:
Set rs = Con.Execute("query1")
и это также не сработало.
Я также попытался заменить полный блок на
Dim cn As Object, rs As Object
Dim myFile As String: myFile = AccessDBPath
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" amp; myFile amp; ";"
.Open
End With
Set rs = cn.Execute("query1")
Sheets("NAHV").Range("E2").CopyFromRecordset rs
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
и это тоже не сработало.
Комментарии:
1. Возвращает ли запрос какие-либо данные в самом Access?
2. Да, он запускается без проблем с доступом и возвращает данные.
3. Хорошо, тогда я сожалею, что не знаю. Я протестировал ваш первый код, и у меня все работает нормально. Я тестировал с запросом, который содержит две таблицы.
4. Чтобы уточнить, проблема не в том, что запрос содержит более одной таблицы. Проблема (я думаю) в том, что запрос содержит другие запросы.
5. Пожалуйста, покажите содержимое query1 . Я не могу воспроизвести ваши результаты ни с помощью методов code block, используя сохраненный запрос, ссылающийся на другие запросы.