Vba project explorer中有多个工作簿对象

Vba project explorer中有多个工作簿对象,vba,excel,Vba,Excel,我有一个奇怪的问题。我有一个vba项目,其中项目资源管理器显示多个工作簿对象。它与问题中的完全相同,但我没有任何错误的引用可以取消选中 不过,我知道是什么原因造成的,我相信你们都可以复制。我所做的是使用工作表的代码名作为简单sub的byref参数,并在sub的末尾将工作表对象置空。因此,我通过引用将整张表置空 比如: Option Explicit Sub test_1() test_2 sh:=Sheet2 End Sub Sub test_2(ByRef sh As Worksh

我有一个奇怪的问题。我有一个vba项目,其中项目资源管理器显示多个工作簿对象。它与问题中的完全相同,但我没有任何错误的引用可以取消选中

不过,我知道是什么原因造成的,我相信你们都可以复制。我所做的是使用工作表的代码名作为简单sub的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使用相同的名称创建一个新工作表,但使用另一个代码名。存储在工作表单元格中的任何数据都不会丢失。旧的代码名引用工作簿对象

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


工作表中的解决方案当然不是空的,但有人知道如何恢复吗?

好吧,在经历了Excel的这种奇怪行为之后,我终于可以说我已经尝试了很多次,我可以确认,至少我的实验的原因确实是使用了用户定义的函数UDF。一旦出现临时工作表,就无法修复工作簿。我的方法是创建一个新工作簿,并从旧工作簿复制所有模块和所有工作表


如果出现此问题,请确保不要使用用户定义的函数。

是否打开了其他Excel工作簿?它们都将显示在同一个代码编辑器中。@roryap是的,我有。和几个全局模板。但我在上面的一个“空”excel实例上测试了这个示例。两者显示相同。使用以下命令同时删除工作表如何:Application.DisplayAlerts=False sh。Delete Application.DisplayAlerts=True@Luuklag不知道你说的“同时”是什么意思?删除右键单击“我是资源管理器”是不可能的。@p删除,不,除了将所有代码移到新工作簿并删除旧工作簿之外,我从未找到解决方案。我想知道为什么这个答案被否决,但没有提供替代答案。至少有一个被否决的理由是值得赞赏的,我们都可以从中学到一些东西。