我有一个加载了全局变量的模块。我希望这个模块中全局变量的名称保存在第一列中,全局变量值保存在第二列中
即
public variable1 as string
public variable2 as string
public variable3 as string
variable1 = David
variable2 = Chicken
Variable3 = Apple
列a:variable1、variable2、variable3b列:大卫,鸡肉,苹果
我可以想出三种方法。
您可以将全局变量设置为属性,并将其值存储在工作表的单元格中。代码的执行速度会较慢,但这些值将保持不变,并且可以在电子表格上查看/编辑。
例如,要定义一个充当全局变量的字符串属性"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变量(为了速度),则需要比使用命名范围更少的代码更改。
编辑2
如果你想疯狂地创建自修改代码,你可以获取工作簿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中设置值或检索它。
选项1
使用VBA.Collection或Scripting.Dictionary保存这些值。然后,您可以随时迭代这些项并输入/输出它们。这可能是最好、最快的解决方案。
选项2
对VBA编辑器进行编程。
- 分析包含变量的目标CodeModule
- 提取所有全局变量定义
- 根据这些定义,动态创建一个新的CodeModule
- 在这个动态CodeModule中,创建一个输出变量值的过程
- 调用此过程(这可能是最困难的部分)
提示:不要选择此选项。