[英]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.