如何使用VBA在MS Access中更新多个表?

时间:2015-08-27 05:19:41

标签: vba ms-access sql-update adodb

每个月我都要从大约30个excel文件中更新我的MS Access数据库。它们具有相同的结构和格式。首先,我必须将所有excel表中的所有数据合并为一个。

然后我运行代码(下面)来更新我的数据库。但是我为每个表运行代码,因为我不知道如何改进代码以便使用主键进行更新。

所以有3个问题: 对我来说最重要的是:如何让这个vba代码根据主键更新所有表格?

是否可以对vba代码说明查看excel模板中与MS Access数据库中特定列对应的特定范围?为了在更新数据库之前合并所有excel表。

然后如果以下两个问题都可以解决:是否可以选择所有这些excel文件所在的文件夹,代码将遍历所有文件?

Public Sub UpdatePriceList()
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim sProduct As String, sVariety As String, cPrice As Variant
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
    "Data Source=C:\Users\Gord\Desktop\Database1.accdb;"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "PriceList", cn, adOpenKeyset, adLockOptimistic, adCmdTable

Range("A2").Activate  ' row 1 contains column headings
Do While Not IsEmpty(ActiveCell)
    sProduct = ActiveCell.Value
    sVariety = ActiveCell.Offset(0, 1).Value
    cPrice = ActiveCell.Offset(0, 2).Value

    rs.Filter = "product='" & sProduct & "' AND variety='" & sVariety & "'"
    If rs.EOF Then
        Debug.Print "No existing record - adding new..."
        rs.Filter = ""
        rs.AddNew
        rs("product").Value = sProduct
        rs("variety").Value = sVariety
    Else
        Debug.Print "Existing record found..."
    End If
    rs("price").Value = cPrice
    rs.Update
    Debug.Print "...record update complete."

    ActiveCell.Offset(1, 0).Activate  ' next cell down
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub

提前谢谢你!

0 个答案:

没有答案