Excel VBA:Workbooks.Open返回错误的对象

时间:2018-01-12 21:04:03

标签: excel vba excel-vba

在Excel 2016中(不记得它在早期版本中发生过),我开始遇到Workbooks.Open命令没有返回正确的Workbook对象的问题。例如:

Dim wbkHelper as Workbook
Set wbkHelper = Workbooks.Open(filePath, ReadOnly:=true)

Open命令正常运行 - 它打开了“filePath”文件,就像它应该的那样 - 但是wbkHelper最终指向完全错误的文件,通常是ThisWorkbook对象。 wbkHelper对象永远不会在代码中的那一点之后重新分配,因此它不是代码正在做的事情。这种情况有时只会发生并且很难重现,但是当它发生时会破坏整个宏。

我可以想出多种方法来解决这个问题,但这不是必要的吗?这是一个永远使用的核心VBA功能,它是您期望的工作。

4 个答案:

答案 0 :(得分:4)

我已经看到了用VB6编写的旧应用程序,该应用程序已经使用了很多年,并且升级到Excel 2016的用户开始报告问题。就我而言,这似乎一直在发生(似乎返回对.xla插件之一的引用)。由于该程序打开了多个Excel文件,并且用户还可能打开了其他文件,因此每次打开新工作簿时关闭并重新打开Excel都不可行。

直到Microsoft确认这是Excel中的错误,或者有人可以找出导致问题发生的原因,我绝对建议您忽略Workbooks.Open方法的返回值,而使用文件名来获取然后从Workbooks集合中获取Workbook对象引用。

/home/imam

答案 1 :(得分:0)

不确定这是否和我经历的一样。我的问题是,运行宏时,一个用户无法打开保存在共享点位置上的csv文件(因此他尝试打开的文件中没有宏)(如果相关,它已映射到驱动器号)。其他用户对于以相同方式访问相同文件没有问题。此用户的问题在数周的多次重新引导后仍然存在。它正在打开文件的损坏版本。

我发现的是:

  • 资源管理器视图显示了文件上的正确时间戳记
  • 直接在excel中打开文件,但仍在打开损坏的版本
  • 直接用word打开文件也打开了损坏的版本
  • 在记事本(不是MS Office)中打开文件会打开正确的版本
  • 使用命令行more打开了正确的版本

我没有发现是与脱机或同步文件有关(如Google搜索所建议的)。

修复它的一个“按钮”,我发现它大致与红线对齐(这是列表中的第一个按钮),这是关于该文件在sharepoint上具有最新副本的情况。

screenshot from excel

点击该按钮,一切正常。

我什至不知道如何重新创建问题,所以我无法提供带有按钮的屏幕截图。

答案 2 :(得分:-1)

我今天遇到了同样的问题,并通过关闭所有工作簿并重新启动Excel来解决它。

在Office 365上使用Excel 2016。

Dim curWS As Worksheet
Dim usrWB As Workbook
Dim usrWS As Worksheet

Set curWS = ActiveWorkbook.ActiveSheet
Set usrWB = Workbooks.Open("C:\Temp\user.xlsx")
Set usrWS = usrWB.Sheets("Users")

在设置的usrWS行收到运行时错误“9”:下标超出范围

我发现usrWB没有引用user.xlsx文件,而是引用了curWS行中的工作簿,该行没有名为“Users”的工作表来解释RTE。我发现了这个问题,并尝试重新启动Excel,然后再尝试重启,问题就消失了。

答案 3 :(得分:-1)

今天遇到了这个问题。试试看:

Dim WB As Object
Set WB = Application.Workbooks.Open(PathWay)
Debug.Print TypeName(WB)

TypeName函数返回工作簿。所有工作簿的方法/属性都可以访问,只是没有智能:-(

有点骇人听闻,但我有感觉,无论潜在的问题是什么,它都不会在一段时间内得到解决