首页 > 解决方案 > Office 365 更新到版本 1908 - VBA 参考/对象库

问题描述

问题

我们的办公电脑都运行 Office 365 专业增强版,并且正在逐步更新到版本 1908(内部版本 11929.20562)。随着 PC 的更新,我们的许多 VBA 宏都因各种对象错误而失败。到目前为止,我们在 Outlook 和 WRQ Reflections(终端仿真器)这两个产品中遇到了错误。

例子

Sub master_dailyWhispirSMS_P2(myExcel As Excel.Application, myWorkbook As Excel.Workbook, worksheetName As String, testingMode As Boolean)

While Trim(myWorkbook.Worksheets(worksheetName).Cells(rowNum, 1).Value) <> ""

上述代码导致运行时错误“91”对象变量或未设置块变量

Dim myExcel As Excel.Application    
Dim myWorkbook As Excel.Workbook
Set myExcel = GetObject(, "Excel.Application")
myExcel.Workbooks.Open (folderPath & "\" & fileName)
Set myWorkbook = myExcel.Workbooks(fileName)
myWorkbook.Activate

上面的代码导致错误编译错误:找不到方法或数据成员。编译错误出现在MyWorkbook.Activate上。

发现

到目前为止,共同的主题是我们正在使用早期绑定并使用 Microsoft Excel 对象库中的对象。

我尝试更改为使用后期绑定,它让我解决了一个问题,但是有太多的例程可能需要更新。

在 VBA 编辑器中,在“工具”菜单上的“参考”下,Microsoft Excel 16.0 对象库显示为选中状态。我尝试删除引用,然后再次将其添加回来,这似乎已经解决了问题。这也适用于我的同事 PC。

寻求的想法/解决方案

此代码在 Office 更新之前可以正常工作。除了让每个单独的用户执行删除/添加之外,我还试图了解出了什么问题,以及是否有任何其他替代方法可以解决此问题。

请注意,我对早期和晚期绑定的理解仍然非常“绿色”,但我认为不知何故,对对象库的引用要么已损坏,要么只是在更新后没有指向正确的 DLL 文件。这可以解释为什么各种方法都不起作用。

标签: excelvba

解决方案


虽然我无法找出导致问题的原因,但我能够通过删除每个参考然后重新添加来解决问题。幸运的是,我发现我能够更改一个主文件并让我们的 IT 人员将其推送给所有员工,因为我无法让 VBA 在正确的项目中删除和添加引用。

我能够在每个项目中单独运行宏并比较 Reference.Name、Reference.Description、Reference.fullpath 和 Reference.GUID。所有属性都是相同的,所以不知道为什么引用“坏了”。

无论如何,发布此答案只是为了确认删除和添加引用为我解决了这个问题。

这是我用来比较项目之间的引用的代码(添加/删除引用之前和之后)。

Sub checkLibraryReference()

Dim vbProj As Object
Dim refChk As Object
Set vbProj = Session.VBProject
Set refChk = vbProj.References
Dim printLine As String

For Each refCheck In vbProj.References
printLine = refCheck.Name & "," & _
     refCheck.Description & "," & _
     refCheck.major & "," & _
     refCheck.minor & "," & _
     refCheck.fullpath & "," & _
     refCheck.GUID & Chr(13)
Debug.Print printLine

Next refCheck

End Sub

我从即时窗口抓取输出,粘贴到 Excel 中并使用文本到列。然后我只是做了一个简单的比较。

我努力寻找关于 References Object 的文档,但最终在 Access VBA Reference 中找到了它:

访问 VBA 参考库


推荐阅读