在浏览了在线论坛之后,我开发了一些代码来从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数据库的最后一行,但是没有运气。
答案 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