我是新手,想了解 VBA。
modules 和 class modules 有什么区别?为什么我只能在 Modules 中使用宏。 (我想我这里错了,但我不知道如何从 Class modules 中添加宏)
最后,我必须在 class modules 中添加我所有的事件处理程序,并将我的所有宏代码都放在 modules 中。
回答1
Modules 在整个代码中都是全局的。默认情况下,录制的宏保存在 Modules 中,但您可以剪切代码并将子/函数粘贴到 class 中。
Mod1.DoSomething()
' Mod1 不需要实例化,它是全局的,通过应用程序,只有一个实例,称为单例模式。
Classes 是一个需要实例化它们的概念,它们的范围是有限的。
Public globalScope as New Class0
' <--class0 的方法在 Module 或 Class 内外都可用。
Private memberScope as New Class1
' <--class1 的方法在整个 Module 或 Class 中可用。
Dim localScope as New Class2
' <-- class2 的方法仅在子/函数内部可用。
您可能希望将事件处理程序保留在 Module 中,因为它是全局的。如果您使用事件处理 class ,则这些事件将不可用。
.Net 编码中的 ps "Modules" 被称为 Static Classes
Ps2 说明 Subroutine 和 Function 之间的区别是;一个函数返回一个 value 作为子例程只是做一些事情。