2012-02-01 92 views
1

我正嘗試使用INSERT INTO命令將數據寫入Excel 2010文件中的Access 2007文件。數據包含在Tool_Selector.xlsm excel文件的「NewProj」工作表中,並且需要將其寫入「Tool_Database.mdb」文件,但不幸的是,我收到了幾個不同的錯誤。這就是我目前擁有的使用INSERT INTO將數據寫入訪問數據庫

Sub AddData() 
    Dim Cn As ADODB.Connection 
    Set Cn = New ADODB.Connection 

    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Tools_Dev\_Tool_Selector\Tool_Selector.xlsm;Extended Properties=Excel 8.0;" _ 
     & "Persist Security Info=False" 

    Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value" 

    Cn.Close 
    Set Cn = Nothing 
End Sub 

我從這個線程的代碼:Insert Data from Excel into Access using VBA

我只需要轉移單個細胞的價值。

謝謝。

+0

我知道,這 Cn.Execute 「INSERT INTO Project_Names用 'd:\ Tool_Database \ Tool_Database.mdb' SELECT * FROM工作表(」 取名爲NewProj 「)的範圍。(」 A2 「) 是其中的價值。」休息...我如何選擇特定的細胞或細胞行? – thebiglebowski11 2012-02-01 21:55:49

+2

看看是否有幫助:http://stackoverflow.com/questions/5122582/run-access-query-from-excel-and-pass-paramerts-to-the-query/5122667#5122667 – Fionnuala 2012-02-01 21:57:29

+0

現象,你是一個好人。 – thebiglebowski11 2012-02-01 22:04:48

回答

2

問題是你在SQL語句中使用VBA代碼。以下行將編譯,但在執行時失敗:

Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value" 

它,因爲你仍然在SELECT語句當您使用工作表(),.Range和.value的的VBA函數失敗。 IIRC,你應該能夠使用SQL語法來從工作表中選擇一個特定的範圍。對於正確的語法應爲:

"SELECT * FROM [Sheet$]" 

如果你想要一個特定的範圍內,那麼你想嘗試:

"SELECT * FROM [Sheet$A1:C20]" 

有在這個微軟的文章:http://support.microsoft.com/kb/257819,如果你正在尋找更多有關在Excel中使用ADO的信息。腳本專家也寫了一篇很好的文章,幫助我在幾年前瞭解它:http://technet.microsoft.com/en-us/library/ee692882.aspx

希望能幫助您解決您的問題。不過,我會留下一個警告字。我記得當我第一次使用這個代碼時,在查詢已經打開的Excel電子表格時遇到了一些非常奇怪的問題。如果我正在查詢一個已經打開的Excel電子表格,那麼我會遇到一個問題,內存泄漏,Excel最終會耗盡內存使用。解決問題的唯一方法是完全關閉Excel。 ADO引用是否被正確關閉/清除也沒有關係。

事實上,我只是谷歌搜索它來仔細檢查,這裏是一個關於bug的文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;319998&Product=xlw

0

這聽起來類似的問題從Office 2003升級到2007年

我的解決辦法改變連接字符串中的供應商時,我曾經有過。由於您使用的是現代辦公的版本,我認爲它應該是:

Provider=Microsoft.Ace.OLEDB.12.0; 

您可能要考慮這樣做的擴展屬性爲好。我知道Excel 8.0是一個Excel '97文件。而Excel 2010是14.0