将数据从Excel传输到Access表

时间:2019-05-01 18:57:03

标签: excel vba ms-access

在浏览了在线论坛之后,我开发了一些代码来从X Access数据库中提取数据并将其放置在excel中,该工作成功进行了。从那里,我要获取这些数据并将其放置在另一个Access数据库中。将excel视为中介,在某个时候(这是我老板提供的一个项目),excel将帮助进行计算并将该信息保存到其他Access数据库中。目前,我只希望将X Access数据放入Y Access表中。我在该展示位置上遇到了问题。在Y Access数据库中,我想转到最后一行,插入一行,然后将数据放入其中。听起来很简单,但最后在DataPost()子菜单中给我一个问题。对于以下内容:

For i = 1 To oSelect.Rows.Count
    oRS.AddNew
For j = 1 To oSelect.Columns.Count
    oRS.Fields(j) = oSelect.Cells(i, j)
Next j
oRS.Update
Next i
oDB.Close

我收到一个运行时错误3265,提示在此集合中未找到Item。我可以遍历代码并查看所选择的数据,但是到最后时,就会出现该错误。

我正在使用DAO连接,下面的代码用于Pull and Post(问题)代码。在网上,我看到了很多其他选项,例如ADO,但是我相信我不能在DAO连接之外添加其他内容。我也希望能够提供DataPull信息,以便您可以在线查看从其他人那里获得的DAO逻辑。

SQL Select更长,但在将其放置在该论坛中时出错,因此将其缩减。

Sub DataPull()

    Const DbLoc As String = "C:\WIP\PullSample.accdb"
    Dim db As DAO.Database, rs As DAO.Recordset, wkb As Workbook, wks As Worksheet, wks2 As Worksheet, recCount As Long
    Dim SQL As String, i As Double, n As Double, lr As Double, t As Double


    Set wkb = ActiveWorkbook
    Set wks = wkb.Worksheets(1)
    Set wks2 = wkb.Worksheets(2)
    Set db = OpenDatabase(DbLoc)

    SQL = "SELECT [AA-AM].Dates, [AA-AM].[A US Equity]"
    SQL = SQL & "FROM [AA-AM] "
    SQL = SQL & "WHERE [AA-AM].Dates = Date() "

    Set rs = db.OpenRecordset(SQL, dbOpenSnapshot)

    wks2.Range("B5").CopyFromRecordset rs
    wks2.Range("B5:GG5").Font.Name = "Garamond"
    wks2.Range("B5:GG5").Font.Size = 10

    wks2.Range("C5:GG5").Copy
    wks.Range("D6").PasteSpecial Transpose:=True

    Set rs = Nothing
    Set wks = Nothing
    Set wks2 = Nothing
    Set wkb = Nothing


      End Sub

    Sub DataPost()

    Dim oSelect As Range, i As Long, j As Integer, sPath As String
    Dim lr as long
    Dim wkb As Workbook, wks As Worksheet, wks2 As Worksheet
    Dim oDAO As DAO.DBEngine, oDB As DAO.Database
    Dim oRS As DAO.Recordset
    Const DbLoc As String = "C:\WIP\ProjPullDB.accdb"

    Set wkb = ActiveWorkbook
    Set wks = wkb.Worksheets(1)
    Set wks2 = wkb.Worksheets(2)
    Set oSelect = wks2.Range("B5:GG5")

    'wks2.Activate
    'oSelect.Copy

    Set oDAO = New DAO.DBEngine
    Set oDB = oDAO.OpenDatabase(DbLoc)
    Set oRS = oDB.OpenRecordset("AA-AM")

    For i = 1 To oSelect.Rows.Count
        oRS.AddNew
    For j = 1 To oSelect.Columns.Count
        oRS.Fields(j) = oSelect.Cells(i, j)
    Next j
    oRS.Update
    Next i
    oDB.Close

End Sub

我希望能够将oSelect数据wk2.Range("B5:GG5")数据放入Y Access数据库的最后一行,但是没有运气。

1 个答案:

答案 0 :(得分:0)

错误在这里

 For j = 1 To oSelect.Columns.Count
    oRS.Fields(j) = oSelect.Cells(i, j)
Next j

字段是从零开始的数组,因此您将数据放入错误的字段中,并且当您到达最后一列时,您尝试访问的字段不存在。你想要

For j = 1 To oSelect.Columns.Count
    oRS.Fields(j-1) = oSelect.Cells(i, j)
Next j