我有一些公共工作表变量,它们在打开工作簿时首先被初始化。我有一个按钮,基本上可以做到这一点:

Dim Response As Variant

Response = MsgBox("Are you sure you want to delete this worksheet?", vbYesNo + vbExclamation, "Confirm Action")
If Response = vbNo Then
    GoTo exit sub
End If

'Save workbook prior to deletion as a precaution
ThisWorkbook.Save

ActiveSheet.Delete


由于某种原因,在此运行之后,不再声明那些工作表变量,并且每次都必须重新初始化它们。我尝试在.Delete之后添加我的InitVariables宏调用,但仍然无法正常工作。

为什么会这样呢?

最佳答案

原因实际上很简单-工作表是VBA中的一个类,即使其为空,其代码模块也会与项目的其余部分一起编译。当您删除工作表并停止执行代码时,下一次您运行某些代码时,VBE必须重新编译项目,因为您删除了代码模块。这将导致您的自定义类扩展丢失其状态。

请注意,除非代码停止运行并重新编译,否则不会发生这种情况。这很好用:

Sheet1.foo = 42        'foo is a public variable in Sheet1
Sheet2.Delete
Debug.Print Sheet1.foo 'Prints 42

07-26 00:20
查看更多