2015-02-09 168 views
0

我在Excel 2007中使用了以下vba代碼以成功查詢Access 2007 accdb數據庫。信用(摘自Michael Alexander撰寫的「Excel®分析員訪問指南」)。但是,當我嘗試使用Access 2010 accdb數據庫的Excel 2010時出現問題。首先,系統表示DAO數據庫未在Excel 2010 VBA中定義。所以我去參考並勾選了DAO 3.6。接下來系統表示它無法識別DBEngine.OpenDatabase(「M:\ SVRData \ Booking 2801_BE.accdb」)上的數據庫。請幫助Excel 2010 VBA DAO查詢與Access 2010數據庫不起作用

Sub RunAccessQuery() 

'Step 1: Declare your variables 
    Dim MyDatabase As DAO.Database 
    Dim MyQueryDef As DAO.QueryDef 
    Dim MyRecordset As DAO.Recordset 
    Dim i As Integer 

'Step 2: Identify the database and query 
    Set MyDatabase = DBEngine.OpenDatabase("M:\SVRData\Booking 2801_BE.accdb") 
    Set MyQueryDef = MyDatabase.QueryDefs("Bookings") 

'Step 3: Open the query 
    Set MyRecordset = MyQueryDef.OpenRecordset 

'Step 4: Clear previous contents 
    Sheets("Main").Select 
    ActiveSheet.Range("A6:K10000").ClearContents 

'Step 5: Copy the recordset to Excel 
    ActiveSheet.Range("A7").CopyFromRecordset MyRecordset 

'Step 6: Add column heading names to the spreadsheet 
    For i = 1 To MyRecordset.Fields.Count 
    ActiveSheet.Cells(6, i).Value = MyRecordset.Fields(i - 1).Name 
    Next i 

End Sub 
+0

請勿使用DAO 3.6參考 - 使用「Microsoft Office 14.0 Access數據庫引擎」參考。 – Rory 2015-02-09 10:28:01

+0

實際上,我最初使用的是Microsoft Office 14.0 Access數據庫引擎,但出現此錯誤:「用戶定義的類型未定義」。這就是爲什麼我決定打勾DAO 3.6參考。 – hhap 2015-02-09 10:33:31

+0

您的代碼使用該Access數據庫引擎參考集編譯正確。 – Rory 2015-02-09 10:37:25

回答

0

DAO不識別accdb。 您可以:

  • 將後端轉換爲mdb。
  • 使用ADO代替dao。

請注意,如果您僅使用表格訪問後端,那麼轉換爲mdb不應引起任何問題。但是,您可能必須創建新的mdb數據庫,然後從accdb中導入後端表。

我覺得這種事情特別在部署方面令人沮喪。