使用VBA将Access文件表导出到Excel电子表格

时间:2014-01-09 18:29:17

标签: excel vba dao

我正在尝试以下代码使用VBA导入活动工作表中的数据,并将Access文件作为源。

要导入的Access表称为“Table01”,定义查询时出现错误消息(设置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

2 个答案:

答案 0 :(得分: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集合中删除它。 / p>

有关更多示例,请访问Microsoft网站,例如http://msdn.microsoft.com/en-us/library/office/ff194892.aspx

编辑(更好):使用临时QueryDef而不需要删除它后面(感谢Remou)

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

答案 1 :(得分: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