2012-05-16 54 views
1

我有一個在Access 2010數據庫中的表與Excel表中列名稱相同的列名稱。我必須刪除Access表數據內容,然後將數據從我的宏中抽取出來,然後將excel表單中的數據輸入到它中。現在,我試着查看/測試是否可以將我的Excel數據抽取到Access中的空表中。一旦我得到這個工作,我可以'傾銷Excel數據'刪除內容'工作。運行時錯誤無法識別的數據庫,同時將數據從excel 2010導出到訪問表2010使用excel vba

這裏是我的Excel VBA宏代碼:

Sub ADOFromExcelToAccess() 
'exports data from the active worksheet to a table in an Access database 
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long 
' connect to the Access database 
Set cn = New ADODB.Connection 
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _ 
    "Data Source=C:\Users\shress2\Documents\TSS_Certification\TSS_Certification.accdb;" 
' open a recordset 
Set rs = New ADODB.Recordset 
rs.Open "t_certification_051512", cn, adOpenKeyset, adLockOptimistic, adCmdTable 
' all records in a table 
r = 2 ' the start row in the worksheet 
Do While Len(Range("A" & r).Formula) > 0 
' repeat until first empty cell in column A 
    With rs 
     .AddNew ' create a new record 
     ' add values to each field in the record 
     .Fields("Role") = Range("A" & r).Value 
     .Fields("Geo Rank") = Range("B" & r).Value 
     .Fields("Geo") = Range("C" & r).Value 
     ' add more fields if necessary... 
     .Update ' stores the new record 
    End With 
    r = r + 1 ' next row 
Loop 
rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 

末次

我添加工具 - >引用,然後選擇Microsoft ActiveX數據對象6.0對象庫。

我m到處運行時錯誤「2147467259(80004005): 無法識別的數據庫格式「C:\用戶\ shress2 \文檔\ TSS_Certification \ TSS_Certification.accdb

任何原因?我該如何解決它?謝謝。

+0

看到這個:http://connectionstrings.com/access-2007 –

+0

我想你可以只添加一個引用到Microsoft Access庫和解決這個更容易,不是嗎? –

回答

3

您正在連接到.accdb數據庫文件。這是一種Access 2007/2010格式。
Microsoft.Jet.OLEDB.4.0提供者已經爲Access 2003時代的mdb文件構建。
我不認爲你可以連接該提供者(它無法識別文件格式)。

試着改變你的連接字符串使用

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\shress2\Documents\TSS_Certification\TSS_Certification.accdb;"

+0

史蒂夫,謝謝你的迴應。當我將Provider更改爲您的Provider時,我可能還需要將Dim cn As ADODB.Connection,rs As ADODB.Recordset更改爲特定於Excel/Access 2010格式的內容。對? – Nemo

+0

謝謝史蒂夫。我只需要更改提供者信息並執行.Fields(「Role」)= Range(「A」&r).Value to ActiveSheet.Range(「A」&r)。 – Nemo

相關問題