Пройдя через онлайн-форумы, я разработал некоторый код для извлечения данных из базы данных 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, в которой говорится, что элемент не найден в этой коллекции. Я могу пройтись по коду и увидеть выбранные данные, но когда они доходят до конца, я получаю эту ошибку.
Я использую соединения DAO, код ниже для кода Pull and Post (проблемы). В сети я вижу много других опций, таких как ADO, но я не могу добавить вне соединений DAO, я полагаю. Я также хочу предоставить информацию о DataPull, чтобы вы могли видеть мою логику DAO, которую я получил от некоторых других в Интернете.
Выбор SQL намного длиннее, но при размещении на этом форуме произошла ошибка, поэтому вырежьте его.
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
data wk2.Range("B5:GG5")
в последнюю строку базы данных Y Access, но не повезло.