我有一个带有大量全局变量的模块。 我希望将此模块中的全局变量名保存在第一列中,并将全局变量值保存在第二列中
即
public variable1 as string
public variable2 as string
public variable3 as string
variable1 = David
variable2 = Chicken
Variable3 = Apple
列a:variable1,variable2,variable3 b栏:大卫,鸡,苹果
答案 0 :(得分:1)
我可以想到三种可以解决这个问题的方法。
您可以将全局变量设置为属性,并将其值存储在工作表的单元格中。执行您的代码会比较慢,但这些值会在电子表格中保留并可以查看/编辑。
例如,要定义一个充当全局变量的字符串属性'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
中,然后解析该模块代码,然后将结果写回来。不容易或不推荐。
答案 1 :(得分:0)
除了使用公共变量之外,为什么不直接将值放在第一列中的描述中,而将值放在第二列中。
Column A Column B
Variable1 David
Variable2 Chicken
Variable3 Apple
它可能会减慢您的代码速度,但可能更容易,您不必在2个位置更新变量。
您可能会编写一些函数,一个用于设置值,另一个用于获取值。这些函数将循环遍历列A,直到找到描述,然后设置B列中的值或进行检索。
答案 2 :(得分:0)
使用VBA.Collection或Scripting.Dictionary来保存值。 然后,您可以随时迭代这些项目并输入/输出它们。 这可能是最好,最快的解决方案。
提示:不要选择此选项。