我正在尝试以下代码使用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
答案 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