2014-01-09 594 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 
相關問題