删除工作表后不再声明VBA全局变量

时间:2016-09-24 00:29:52

标签: excel vba excel-vba

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

better

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

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:4)

我刚用Comintern foo测试过它。有趣的是标准模块foo损失了它的价值,但工作表模块中的公共foo变量并没有损失它的价值。

enter image description here