【问题标题】:Public or Constant?公开的还是恒定的?
【发布时间】:2017-12-25 20:04:36
【问题描述】:

我想声明一种全局变量。我要做的是初始化这些变量,然后在宏中使用它们,并在其他宏中更改它们的值。

我开始把它写成公共变量:

Option Explicit
'definition of global variables
Public r_start As Integer
Public r_end As Integer
Public c_little As Integer
Public c_big As Integer
Public c_sel_start As Integer
Public c_sel_end As Integer
Public c_data_start As Integer
Public c_data_end As Integer

Public Sub Init_Globals()
' Access global variable initialization
    r_start = 20
    r_end = 833
    c_little = 6
    c_big = 5
    c_sel_start = 1
    c_sel_end = 4
    c_data_start = 11
    c_data_end = 101
End Sub

这里的问题是我必须在我的每个 SubProcedure 中调用 Sub_Init_Globals(),因此如果我想在其他 SubProcedures 中更改全局变量的初始值,则不会进行这些更改。

您知道创建此类变量的方法吗?

【问题讨论】:

  • 一种方法是使用包含变量的类模块,并实例化该类模块的实例。但这仍然容易受到“项目重置”的影响。
  • 在 Workbook_Open() 事件中调用 Init_Globals() 是一种方法。

标签: excel initialization vba


【解决方案1】:

据我了解,这些只是初始值,您还有下一个选择:
1.) 您可以在 Workbook_Open sub 中声明这些变量并赋值。
更多这里Is it possible to declare a public variable in vba and assign a default value?
2.) 创建单独的工作表,该工作表将被隐藏,支持表由这些值组成,在这种情况下,即使关闭 Workbook,对这些值的所有更改也将被保存。
3.) 声明常量并将其值分配给过程中的不同变量。

【讨论】:

  • “我只想发表评论,但遗憾的是我不能:/” - 通常我会说“您不能发表评论的事实并不是滥用系统的理由,因为您可以通过发表评论来滥用系统一个'答案'”,但你的帖子几乎已经是一个答案了。所以最好从答案中删除该行(如果我没有看到它,我不会知道这不是一个真实的答案)并且可能只是“整理”其余部分。
  • 谢谢你的回答,我想做一些非常干净的东西,它是为了在我的公司使用。我将尝试通过替代工作表中的单元格进行初始化。
  • 感谢您的回复。我了解禁止新用户发表评论的政策,但它变得令人讨厌,以至于我什至无法要求代码示例或屏幕截图,因此我必须即兴发挥并提供“通用”解决方案。
  • 获得离开 cmets 所需的 50 次代表并不需要很长时间 - 只需在那里坚持一段时间,您就会拥有它。
【解决方案2】:
Public Const YourVariableName as Integer = 1 

(或任何其他类型或值)在任何用户模块的顶部似乎都可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多