Передача данных из Excel в таблицу Access - PullRequest
0 голосов
/ 01 мая 2019

Пройдя через онлайн-форумы, я разработал некоторый код для извлечения данных из базы данных 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, но не повезло.

1 Ответ

0 голосов
/ 02 мая 2019

Ошибка здесь

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...