将全局变量保存在电子表格中



我有一个加载了全局变量的模块。我希望这个模块中全局变量的名称保存在第一列中,全局变量值保存在第二列中

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中,创建一个输出变量值的过程
  • 调用此过程(这可能是最困难的部分)

提示:不要选择此选项。

相关内容

最新更新