2016-01-25 30 views
0

我正在研究一个适度复杂的VBA程序,其中有很多变量需要跟踪一堆嵌套的子程序。我通过将所有变量(除了在子声明中声明的那些变量或dim:ed作为循环计数器)都声明为Public,将所有变量都称为“Variables”来完成此操作,所有这些模块都进行了整齐的分类和评论。是否有任何理由不一次性声明所有变量?

这一切都很好,代码运行很快,但事实上,我发现几乎没有使用公开/私人的样本代码,并且倾向于默认为Dim,这让我很怀疑我做错了什么。

是否有一个真正的缺点,他们都在一大堆,或者我只是偏执?

+0

来自programmers.stackexchange的一个问题提供了一个很好的答案:http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil – Manu

+0

这里有一大堆术语对我来说都是希腊语,但我认为我有这个主意。看起来我必须坚持使用Public才能使用模块之间的变量 - 我不认为公共和私人之间有任何限制他们在一个项目内的任何东西? –

回答

5

我不是Globals的粉丝。你可以进入国家问题。此外,您不能在全局设置中断点。

虽然,没有什么是一成不变的,因为每一种情况是不同的,我的建议是:

  1. 模块,除非该模块外部访问声明潜艇和功能私有。
  2. 在类中,除非需要,否则将所有内容声明为私有。在需要公开字段的地方,使用属性。
  3. 函数和子函数内部声明例程中的所有内容,而不是全局变量。
  4. 声明所有参数为ByVal,除非您有理由传递ByRef。

我只在必要时使用全局变量。有时候你需要使用它们,但我必须为自己辩解。我已经支持许多使用全局变量的工作簿,这些全局变量是在工作表,用户按钮等事件处理程序中设置的,可以让您在调试时头疼。

希望有所帮助。

相关问题