簡體   English   中英

使用Excel 16更新MDB記錄-ActiveX組件無法創建對象

[英]Updating MDB records with Excel 16 - ActiveX component can't create object

我有一個Excel VBA宏,它將在2010年更新MDB記錄的特定字段值。

我剛剛更新到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記錄?

這是一個工作場所應用程序,目前我無法完全控制各種安裝件

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

添加了dim語句,並更改為oledb 12.0。 該代碼適用於我的目的。 必須刪除rs.edit,以便將來引用此內容的任何人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM