我有一个带有大量全局变量的模块。我希望将此模块中的全局变量的名称保存在第一列中,并将全局变量值保存在第二列中
IE
public variable1 as string
public variable2 as string
public variable3 as string
variable1 = David
variable2 = Chicken
Variable3 = Apple
a 列:变量 1、变量 2、变量 3 b 列:大卫、鸡、苹果
我有一个带有大量全局变量的模块。我希望将此模块中的全局变量的名称保存在第一列中,并将全局变量值保存在第二列中
IE
public variable1 as string
public variable2 as string
public variable3 as string
variable1 = David
variable2 = Chicken
Variable3 = Apple
a 列:变量 1、变量 2、变量 3 b 列:大卫、鸡、苹果
我可以想出三种方法来解决这个问题。
您可以将全局变量设置为属性,并将它们的值存储在工作表的单元格中。代码的执行速度会变慢,但这些值将保持不变并且可以在电子表格上查看/编辑。
例如,要定义一个类似于全局变量的字符串属性“Foo”,请将其放入全局模块中:
Public Property Get Foo() As String
Foo = DebugSheet.[B2]
End Property
Public Property Let Foo(value As String)
DebugSheet.[B2] = value
End Property
您还可以对全局变量使用命名范围,例如 DebugSheet.[Foo]
第三种方法是硬编码保存和加载例程,将每个全局显式保存到电子表格中的特定单元格。这仅在您上次更改全局变量后保存例程已运行时才有效。
作为旁注,我会推荐这些属性。编写它需要更多时间,但稍后如果您想切换回 VBA 变量(为了速度),它需要的代码更改比使用命名范围要少。
如果您想疯狂并创建自我修改代码,您将获得工作簿 VBProject,获得包含全局变量的模块的组件,然后从其 CodeModule 中获取行。
set module = ThisWorkbook.VBProject.VBComponents("GlobalsModule").CodeModule
code = module.Lines(1, module.CountOfLines)
然后,您将模块代码放在字符串变量code
中,您将对其进行解析,然后将结果写回。不容易或不推荐。
与其使用公共变量,为什么不将值放在工作表中,并在第一列中添加描述,在第二列中添加值。
Column A Column B
Variable1 David
Variable2 Chicken
Variable3 Apple
它可能会使您的代码变慢一点,但您不必在两个地方更新变量可能会更容易。
您可能会编写一些函数,一个用于设置值,一个用于获取值。这些函数将遍历 A 列,直到找到描述,然后在 B 列中设置值或检索它。
使用 VBA.Collection 或 Scripting.Dictionary 来保存这些值。然后您可以随时遍历这些项目并输入/输出它们。这可能是最好和最快的解决方案。
提示:不要选择这个选项。