【问题标题】:Is there any reason not to declare all my variables in one go?有什么理由不一次性声明我的所有变量吗?
【发布时间】:2016-01-25 09:19:47
【问题描述】:

我正在开发一个中等复杂的 VBA 程序,其中有很多变量需要在一堆嵌套的 subs 中进行跟踪。我通过将一个名为“变量”的模块与我所有的变量(除了在子声明中声明的变量或 dim:ed 作为循环计数器的变量除外)声明为 Public 来实现这一点,所有变量都被整齐地分类和注释。

这一切都运行良好,代码运行速度很快,但我发现的示例代码几乎没有使用 Public/Private 并且往往默认为 Dim,这让我非常怀疑我做错了什么。

一大堆全部做有没有真正的缺点,还是我只是偏执?

【问题讨论】:

  • 来自programmers.stackexchange 的问题提供了一个很好的答案:programmers.stackexchange.com/questions/148108/…
  • 在那个术语中有一大堆术语,对我来说都是希腊语,但我想我明白了要点。看起来我必须坚持使用 Public 才能在模块之间使用变量 - 我认为 Public 和 Private 之间没有任何东西可以将它们限制在一个项目中?

标签: excel vba


【解决方案1】:

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

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

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

我只在必要时使用全局变量。有时您确实需要使用它们,但我必须为自己证明这一点。我支持许多使用全局变量的工作簿,这些全局变量在工作表、用户按钮等中设置了事件处理程序,这会让您在调试时头疼。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 2010-12-24
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多