使用ADO 5工作表转移到5个表中

时间:2014-03-25 07:28:19

标签: excel ms-access excel-vba ado vba

我一直在努力将数据从多个excel工作表传输到多个访问表中。那么这是怎么回事。我有5个工作表,每个工作表将从Excel传输到特定的Access表。如何使用VBA执行此操作?

我似乎无法将文件放入,所以我希望你们理解! 在此先感谢帮助我!!

1 个答案:

答案 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
...
相关问题