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

时间:2013-08-19 17:12:21

标签: excel vba global-variables

我有一个带有大量全局变量的模块。 我希望将此模块中的全局变量名保存在第一列中,并将全局变量值保存在第二列中

public variable1 as string
public variable2 as string
public variable3 as string

variable1 = David
variable2 = Chicken
Variable3 = Apple

列a:variable1,variable2,variable3 b栏:大卫,鸡,苹果

3 个答案:

答案 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变量(速度),它需要更少的代码更改,而不是使用命名范围。

编辑2

如果您想要疯狂并创建自修改代码,您将获得工作簿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)

选项1

使用VBA.Collection或Scripting.Dictionary来保存值。 然后,您可以随时迭代这些项目并输入/输出它们。 这可能是最好,最快的解决方案。

选项2

Programm the VBA Editor

  • 解析包含变量
  • 的目标CodeModule
  • 提取所有全局变量定义
  • 从这些定义中,动态创建新的CodeModule
  • 在此动态CodeModule中,创建一个输出变量值
  • 的过程
  • 调用此程序(这可能是困难的部分)

提示:不要选择此选项。