-1

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

IE

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

variable1 = David
variable2 = Chicken
Variable3 = Apple

a 列:变量 1、变量 2、变量 3 b 列:大卫、鸡、苹果

4

3 回答 3

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中,您将对其进行解析,然后将结果写回。不容易或不推荐。

于 2013-08-19T18:22:18.823 回答
0

与其使用公共变量,为什么不将值放在工作表中,并在第一列中添加描述,在第二列中添加值。

Column A       Column B
Variable1      David
Variable2      Chicken
Variable3      Apple

它可能会使您的代码变慢一点,但您不必在两个地方更新变量可能会更容易。

您可能会编写一些函数,一个用于设置值,一个用于获取值。这些函数将遍历 A 列,直到找到描述,然后在 B 列中设置值或检索它。

于 2013-08-19T18:17:44.897 回答
0

选项1

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

选项 2

对 VBA 编辑器进行编程

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

提示:不要选择这个选项。

于 2013-08-19T18:45:23.603 回答