2014-01-09 230 views
0

我在下面的代码中使用VBA将Access文件作为源导入活动工作表中的数据。使用VBA将Access文件表导出到Excel电子表格

要导入的Access表称为“Table01”,当定义查询(Set daoQueryDef = daoDB.QueryDefs(Text))时出现错误消息:“在此集合中找不到项目”。

你知道问题在哪里吗?在synthax?

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 

这种方法与Text为SQL字符串创建一个新的QueryDef并打开它作为一个记录,不复制,然后在年底从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

如果您使用的是空的字符串为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 
相关问题