簡體   English   中英

將數據導出到Excel VBA中的Access

[英]Export data to Access from Excel VBA

我是訪問的新手,並且正在努力了解如何將訪問表/列/行格式與VBA中的excel導出相關聯。

我創建了一個名為Data的訪問表,並創建了3列Food,Drinks和Color列。

存取表

我想將這些單元格范圍從我的excel電子表格導出到Access:

Foodrng = Workbooks(xlFile).Sheets("ToBeExported").Range("D6")
Drinksrng = Workbooks(xlFile).Sheets("ToBeExported").Range("E6")
Colorrng= Workbooks(xlFile).Sheets("ToBeExported").Range("B12:B21")

網上的所有內容都表明我應該使用此版本,因為我的版本是:

strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;"

我想使用INSERT TO格式寫入數據庫,因為我將擴展數據庫列很多,並且我認為這是跟蹤哪個行進去的最簡單方法。

strSql = "INSERT INTO Data (Food, Drinks, Color) VALUES (Foodrng, Drinksrng,Colorrng)"

執行時總是會出現語法錯誤:

Set rs = cn.Execute(strSql)

使用上述方法導出到Access數據庫的正確方法是什么? 由於我是Access的新手,任何/所有信息都將非常有幫助

我的完整代碼:

    Foodrng = Workbooks(xlFile).Sheets("ToBeExported").Range("D6")
    Drinksrng = Workbooks(xlFile).Sheets("ToBeExported").Range("E6")
    Colorrng= Workbooks(xlFile).Sheets("ToBeExported").Range("B12:B21")

    Set cn = CreateObject("ADODB.Connection")
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source= C:\Users\User1\MyDBase.accdb"
    cn.Open strConnection

   strSql = "INSERT INTO Data (Food, Drinks, Color) VALUES (Foodrng, Drinksrng,Colorrng)"

    Set rs = cn.Execute(strSql)
    'MsgBox rs.Fields(0) & " rows in MyTable"
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

使用查詢插入時,需要使用參數傳遞值。 我強烈建議在插入查詢中使用記錄集。

普通的插入查詢一次只能插入一行。 您將需要調整代碼以一次插入一行。 您可以使用記錄集,也可以對每一行執行查詢。

Foodrng = Workbooks(xlFile).Sheets("ToBeExported").Range("D6") 'Adjust ranges to select single cells
Drinksrng = Workbooks(xlFile).Sheets("ToBeExported").Range("E6")
Colorrng= Workbooks(xlFile).Sheets("ToBeExported").Range("B12:B21")

Set cn = CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source= C:\Users\User1\MyDBase.accdb"
cn.Open strConnection

strSql = "INSERT INTO [Data] ([Food], [Drinks], [Color]) VALUES (?, ?, ?)"
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
    Set .ActiveConnection = cn
    .CommandText = strSql
    .Parameters.Append .CreateParameter(, adVarWChar, adParamInput, , foodRng) 'adVarWChar for text 
    .Parameters.Append .CreateParameter(, adInteger, adParamInput, , Drinksrng) 'adInteger for whole numbers (long or integer)
    .Parameters.Append .CreateParameter(, adInteger, adParamInput, , Colorrng)
    .Execute
End With
cn.Close

也許還有另一種或兩種方式,也許值得考慮。

首先是將Excel電子表格設置為Access中的鏈接表-也許可以使用VBA來完成。 這將節省您復制數據的需求。 您也許還可以設置目標工作表並直接使用ADODB中的insert..select將數據從Access中插入Excel。

第二,如果您的要求允許的話,將完全完全避免使用Access。 Excel可以在某種程度上用作數據庫並支持SQL查詢。 https://selectcompare.com/blogs/news/write-select-statements-for-excel-spreadsheets

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM