在项目浏览器中有多个工作簿对象

我有这个奇怪的问题。 我有一个vba项目,其中项目资源pipe理器显示多个工作簿对象。 这是完全一样的在这个 SO问题,但我没有任何错误的引用取消选中。

但是,我知道是什么造成的,我相信你们都可以复制。 我所做的是使用工作表的代号作为一个简单的sub的subref参数的byref参数,并在工作表对象中取消。 所以我通过参考来整理整张纸。

就像是:

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”代号是无效的。 如果你closures并重新打开工作簿,你会明白我的意思。 Excel创build一个具有相同名称(但另一个CodeName)的新工作表。 存储在工作表单元格中的任何数据都不会丢失。 旧的CodeName引用工作簿对象。

项目浏览器

我还没有find一种方法来恢复或删除旧的引用到目前为止(其他然后将所有的对象移动到一个新的工作簿)。 我正在使用Excel 2013。

解决scheme当然不是空的工作表,但有没有人有任何想法如何恢复?

那么,在经历了这个奇怪的Excel行为之后,我终于可以说我已经试过了人的时代,并且我可以证实原因(至less对于我的实验)确实正在使用用户定义的函数(UDF)。 一旦出现表格,就无法修复工作簿。 我的方法是创build一个新的工作簿,并复制所有的模块和所有的旧的(破碎的)工作表。

如果您遇到此问题,请确保不要使用用户定义的function。