我一直在努力将数据从多个excel工作表传输到多个访问表中。那么这是怎么回事。我有5个工作表,每个工作表将从Excel传输到特定的Access表。如何使用VBA执行此操作?
我似乎无法将文件放入,所以我希望你们理解! 在此先感谢帮助我!!
答案 0 :(得分:0)
您可以使用ADO。首先,在VBE中设置对ADO库的引用:工具,参考。查找Microsoft ActiveX日期对象库6.1(或6.0)并勾选旁边的框。
然后,您可以使用下面的代码将工作表中的数据发布到Access数据库中的表中(如果要执行多个工作表,请在循环中使用此代码):
Dim i As Long, j As Long
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim arr() As Variant
'Load the data from a sheet into an array
arr = Sheets(1).Range("A2:B10").Value
'Connect to Access database
Set cn = New ADODB.Connection
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Documents\Database1.accdb"
.Open
End With
'Post data to table
Set rs = New ADODB.Recordset
With rs
.Source = "Table1"
.ActiveConnection = cn
.CursorType = adOpenStatic
.CursorLocation = adUseServer
.LockType = adLockOptimistic
.Open
For i = 1 To UBound(arr, 1)
.AddNew
For j = 1 To UBound(arr, 2)
.Fields(j).Value = arr(i, j) 'This assumes you have an autonumber ID field. (Field indexes in recordsets are 0 based.)
Next
.Update
Next
.Close
End With
'Clean up
Set rs = Nothing
cn.Close
Set cn = Nothing
编辑:
如果要检查表中是否已存在记录,请使用记录集FILTER属性。假设您的电子表格第1列中有“ID”,数据库表中有“ID”字段,请执行以下操作:
rs.Filter = "ID='" & arr(1,j) & "'"
If rs.RecordCount > 0 then
'Record(s) already exist
...