在VBA中,我通常将共享变量定义为Public,而不是通过byVal或byRef构建引用。最常见的是,我调用子例程或函数来为所述变量建立值。有人请向我解释使用byVal / byRef与简单创建公共变量的好处吗?
答案 0 :(得分:3)
这与您定义架构的方式有关。好吧,VBA不是真正的OOP语言,这就是这个问题突然出现在你脑海中的原因。
公共变量保持(保留其值),直到模块实例(它们被声明)存入内存。例如,公共变量是通用模块保持到ThisWorkbook打开(除非存在任何运行时错误)。另一方面,UserForm模块中的公共变量保持不变,直到UserForm的实例打开。类模块中的公共变量是“属性”,并且一直保持到内存中类的实例变量。在其他所有基于类的OOP语言中,没有所谓的公共变量......就像我说的“属性”一样,它们一直保持到加载类实例。
ByVal(byValue)或ByRef(byReference)只是将变量作为参数传递的一种方法(取决于函数中需要的内容)。
哪个更好:根据我以前的经验,VBA中的公共变量真的很容易实现但更容易搞乱。太多公共变量=太多时间到调试。 仅使用2~3个公共变量,并在类中设计代码以保存属性。这种方式,当你跳到其他语言,你将在家里:)