Excel中的VBA:全局常量文件

时间:2009-07-27 17:49:56

标签: excel-vba global-variables excel-2007 vba excel

我正在为Excel工作表编写一些VBA脚本,并且我创建了一个模块,其中包含大多数字符串的完整列表,这些字符串存储了每个数据库字段的名称。这样,如果有人修改数据库,他们可以更新模块中的VBA变量,然后我所有的脚本(直接引用全局变量而不是字段名称)甚至都不知道它们之间的区别。

无论如何,我将在一些不同的无关excel表中工作,我希望他们都可以访问该模块。最糟糕的情况是,我可以手动将模块复制到每个工作簿,但是如果他们可以在外部引用相同的文件,那就太棒了......在VBA / Excel中可以这样吗?

此外,现在我的变量看起来像:

Global tblDeviceType As String

然后我在工作簿打开时调用的模块中的函数中初始化它们。有没有更好的方法来维护我的所有常量或这是否有效?

哦是的,我实际上并没有将它们声明为常量,因为它们中的一些具有更复杂的数据类型(如Ranges)并且无法静态声明 - 至少它看起来不像它们。

4 个答案:

答案 0 :(得分:2)

或者,您可以创建一个文本文件(Microsoft Scripting Runtime库 - > class Scripting.TextStream),您可以在其中保存变量&当你想要阅读它们时加载它们。

将文本文件放在所有工作表均可访问的中心位置 对于范围,您可以将范围的地址存储在文本文件中。

如果我遗失任何东西,请告诉我。

答案 1 :(得分:2)

有几种方法可以做到这一点:

  1. 将所有Excel工作表基于同一个Excel模板。这样他们就可以访问模板中声明的代码。但是,我认为你必须分发模板。
  2. 创建一个activex dll,然后在每个Excel模板中引用它。
  3. 或者您可以在运行时动态加载模块。您将使用ThisWorkbook.VBProject.VBComponents.Import()等方法。您可能必须运行手动填充变量的方法。 (注意我还没有测试过这个)关于这种excel操作的更多信息可以找到here

答案 2 :(得分:0)

您可以制作包含所有名称的Excel电子表格,然后使用与全局同名的命名范围,更改代码以使用命名范围,并使工作表成为插件。

我只是将模块复制到其他电子表格中。

修改:您也可以创建一个包含模块的空白电子表格,然后将其作为插件。我不知道Excel中的Globals是否会以这种方式工作,但值得一试。如果你这样做,请回到这里,它是否有效。

答案 3 :(得分:0)

实际上最简单的方法是将模块添加到.XLA excel插件文件中。 然后通过Excel Addins对话框添加此文件。

该模块现在可以在该用户帐户下运行的所有excel解决方案全局使用。