Обновление записей MDB в Excel 16 - компонент ActiveX не может создать объект - PullRequest
0 голосов
/ 10 июля 2019

У меня есть макрос Excel VBA, который обновляет значение поля конкретной записи MDB в 2010 году.

Я только что обновился до Excel16 и получаю, что компонент ActiveX не может создать объектную ошибку с некогда функциональным кодом.

это ошибки на Set Db = OpenDatabase(MDBPath)

вот полный код:

Sub UpdateAccess()

MDBPath = Sheets("Setup").Range("E19").Value
TabName = Sheets("Setup").Range("E20").Value

Set Db = OpenDatabase(MDBPath)
Set rs = Db.OpenRecordset(TabName, dbOpenTable)

With Sheets("Batches")
    lRow = .Cells(Rows.Count, 1).End(xlUp).Row
End With

BatchNameColumn = Sheets("references").Range("G22").Value
BatchDEColumn = Sheets("references").Range("G28").Value

i = 1

Do While i < lRow

    i = i + 1

    BatchName = Sheets("BatchesForLabels").Range(BatchNameColumn & i).Value

    With rs
        rs.MoveFirst
        While Not rs.EOF
            If rs.Fields("Name").Value = BatchName Then
                rs.Edit
                rs.Fields("ActualDE").Value = Round(Sheets("BatchesForLabels").Range(BatchDEColumn & i).Value, 2)
                rs.Update
                rs.MoveNext
            Else:
                rs.MoveNext
            End If
        Wend
    End With

Loop

rs.Close
Set rs = Nothing
Db.Close
Set Db = Nothing

вот ссылки, которые я включил

Visual Basic For Applications
Microsoft Excel 16.0 Object Library
OLE Automation
Microsoft Office 16.0 Object Library
Microsoft ADO Ext. 2.8 for DDL and Security
Microsoft ActiveX Data Objects 2.8 Library
Microsoft Windows Common Controls - 26.0 (sp6)
Microsoft Forms 2.0 Object Library
Microsoft DAO 3.6 Object Library

Это проблема справочной библиотеки или мне нужна другая стратегия для обновления записей MDB в этой новой среде?

Это приложение на рабочем месте, и я не могу в данный момент точно контролировать различные части установки

1 Ответ

0 голосов
/ 10 июля 2019
Sub UpdateAccess()

    Dim oConn As Object
    Dim rs As Object
    Dim sConn As String
    Dim s As String

    MDBPath = Sheets("Setup").Range("E19").Value
    TabName = Sheets("Setup").Range("E20").Value

    s = MDBPath
    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & s 'Access 2010

    Set oConn = CreateObject("ADODB.Connection")
    oConn.Open sConn

    Set rs = CreateObject("ADODB.RecordSet")
    rs.Open TabName, oConn, 1, 3, &H2

    With Sheets("Batches")
        lRow = .Cells(Rows.Count, 1).End(xlUp).Row
    End With

    BatchNameColumn = Sheets("references").Range("G22").Value
    BatchDEColumn = Sheets("references").Range("G28").Value

    i = 1

    Do While i < lRow

        i = i + 1

        BatchName = Sheets("BatchesForLabels").Range(BatchNameColumn & i).Value

        With rs
            rs.MoveFirst
            While Not rs.EOF
                If rs.Fields("Name").Value = BatchName Then
                    'rs.Edit
                    rs.Fields("ActualDE").Value = Round(Sheets("BatchesForLabels").Range(BatchDEColumn & i).Value, 2)
                    rs.Update
                    rs.MoveNext
                Else:
                    rs.MoveNext
                End If
            Wend
        End With

    Loop

    rs.Close
    Set rs = Nothing
    oConn.Close
    Set oConn = Nothing
End Sub

добавил димные операторы и изменил на oledb 12.0. этот код работает для моих целей. пришлось взять rs.edit для любого, кто ссылается на это в будущем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...