2014-01-09 13 views
0

Я пытаюсь использовать следующий код для импорта данных на активном листе с использованием VBA с файлом доступа в качестве источника.Экспорт таблицы файлов Access в таблицу Excel с помощью VBA

Таблица доступа для импорта называется «Таблица01», при определении запроса появляется сообщение об ошибке (Set daoQueryDef = daoDB.QueryDefs (Text)): «элемент не найден в этой коллекции».

Знаете ли вы, где проблема? В синтаксисе?

Sub Import() 

Dim daoDB As DAO.Database 
Dim daoQueryDef As DAO.QueryDef 
Dim daoRcd As DAO.Recordset 

Set daoDB = OpenDatabase("C:\Users\Desktop\Database\Database.mdb")> 
Text = "SELECT * FROM `Table01`" 
Set daoQueryDef = daoDB.QueryDefs(Text) 

Set daoRcd = daoQueryDef.OpenRecordset 
ThisWorkbook.Worksheets("Import").Range("A4").CopyFromRecordset daoRcd 

End Sub 

ответ

1

Вопрос относится к линии Set daoQueryDef = daoDB.QueryDefs(Text). Нет уже существующего QueryDef с именем, равным значению Text. Для его определения нужно использовать CreateQueryDef.

Set daoQueryDef = daoDB.CreateQueryDef("TempQueryDef", Text) 
Set daoRcd = daoQueryDef.OpenRecordset 
ThisWorkbook.Worksheets("Import").Range("A4").CopyFromRecordset daoRcd 
daoDB.QueryDefs.Delete dao.QueryDef.Name 

Этот метод создает новый QueryDef с Text как его SQL строки и открывает его в качестве записей, делает копию, а затем удаляет его из коллекции QueryDefs в конце.

См. Веб-сайт Microsoft для получения дополнительных примеров, например. http://msdn.microsoft.com/en-us/library/office/ff194892.aspx

EDIT (лучше): Используя временную QueryDef без необходимости удалять его afterwadrs (спасибо Remou)

Set daoQueryDef = daoDB.CreateQueryDef("", Text) 
Set daoRcd = daoQueryDef.OpenRecordset 
ThisWorkbook.Worksheets("Import").Range("A4").CopyFromRecordset daoRcd 
+1

Если вы используете пустой string для имени querydef, вы все равно можете работать с querydef, но он не будет сохранен. – Fionnuala

0

Это работает, вот рабочий код:

Sub Import() 

Dim daoDB As DAO.Database 
Dim daoQueryDef As DAO.QueryDef 
Dim daoRcd As DAO.Recordset 

Set daoDB = OpenDatabase("C:\Users\Desktop\Database\Database.mdb")> 
Text = "SELECT * FROM `Table01`" 

Set daoQueryDef = daoDB.CreateQueryDef("", Text)  
Set daoRcd = daoQueryDef.OpenRecordset 
ThisWorkbook.Worksheets("Import").Range("A4").CopyFromRecordset daoRcd 

End Sub 
Смежные вопросы