我有这个奇怪的问题。我有一个vba项目,项目资源管理器显示多个工作簿对象。它与this SO问题完全相同,但我没有任何错误的引用来取消选中。
然而,我确实知道是什么导致了它,我相信你们都可以复制。我所做的是使用工作表的代号作为简单子的byref参数,并在sub的末尾,取消工作表对象。所以我通过引用整理了整张表。
类似的东西:
Option Explicit
Sub test_1()
test_2 sh:=Sheet2
End Sub
Sub test_2(ByRef sh As Worksheet)
Set sh = Nothing
End Sub
如果你运行test_1,它将运行没有问题。但在那之后,'Sheet2'代号无效。如果你关闭并重新打开工作簿,你会明白我的意思。 Excel创建一个具有相同名称(但另一个CodeName)的新工作表。存储在纸张单元格中的任何数据都不会丢失。旧的CodeName引用了工作簿对象。
到目前为止,我还没有找到恢复或删除旧引用的方法(其他方法然后将所有对象移动到新工作簿)。我正在使用Excel 2013。
解决方案当然不是那么无效的工作表,但有没有人知道如何恢复?
答案 0 :(得分:-1)
好吧,在经历了Excel的这种奇怪的行为后,我终于可以说我已经尝试了人类时间,并且我可以确认原因(至少对于我的实验)确实使用了用户定义函数(UDF)。一旦出现外部工作表,就无法修复工作簿。我的方法是创建一个新的工作簿并复制所有模块和旧(破碎)工作表中的所有工作表。
如果您遇到此问题,请确保不使用用户定义的功能。