在Excel 2016中(不记得它在早期版本中发生过),我开始遇到Workbooks.Open命令没有返回正确的Workbook对象的问题。例如:
Dim wbkHelper as Workbook
Set wbkHelper = Workbooks.Open(filePath, ReadOnly:=true)
Open命令正常运行 - 它打开了“filePath”文件,就像它应该的那样 - 但是wbkHelper最终指向完全错误的文件,通常是ThisWorkbook对象。 wbkHelper对象永远不会在代码中的那一点之后重新分配,因此它不是代码正在做的事情。这种情况有时只会发生并且很难重现,但是当它发生时会破坏整个宏。
我可以想出多种方法来解决这个问题,但这不是必要的吗?这是一个永远使用的核心VBA功能,它是您期望的工作。
答案 0 :(得分:4)
我已经看到了用VB6编写的旧应用程序,该应用程序已经使用了很多年,并且升级到Excel 2016的用户开始报告问题。就我而言,这似乎一直在发生(似乎返回对.xla插件之一的引用)。由于该程序打开了多个Excel文件,并且用户还可能打开了其他文件,因此每次打开新工作簿时关闭并重新打开Excel都不可行。
直到Microsoft确认这是Excel中的错误,或者有人可以找出导致问题发生的原因,我绝对建议您忽略Workbooks.Open方法的返回值,而使用文件名来获取然后从Workbooks集合中获取Workbook对象引用。
/home/imam
答案 1 :(得分:0)
不确定这是否和我经历的一样。我的问题是,运行宏时,一个用户无法打开保存在共享点位置上的csv文件(因此他尝试打开的文件中没有宏)(如果相关,它已映射到驱动器号)。其他用户对于以相同方式访问相同文件没有问题。此用户的问题在数周的多次重新引导后仍然存在。它正在打开文件的损坏版本。
我发现的是:
more
打开了正确的版本我没有发现是与脱机或同步文件有关(如Google搜索所建议的)。
修复它的一个“按钮”,我发现它大致与红线对齐(这是列表中的第一个按钮),这是关于该文件在sharepoint上具有最新副本的情况。
点击该按钮,一切正常。
我什至不知道如何重新创建问题,所以我无法提供带有按钮的屏幕截图。
答案 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函数返回工作簿。所有工作簿的方法/属性都可以访问,只是没有智能:-(
有点骇人听闻,但我有感觉,无论潜在的问题是什么,它都不会在一段时间内得到解决