每个月我都要从大约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
提前谢谢你!