3

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

无论如何,我将在几个不同的不相关的 Excel 表格中工作,我希望他们都可以访问该模块。最坏的情况是,我可以手动将模块复制到每个工作簿,但如果它们都可以从外部引用相同的确切文件,那就太棒了……在 VBA/Excel 中可能会出现这种情况吗?

另外,现在我的变量看起来很简单:

Global tblDeviceType As String

然后我在工作簿打开时调用的模块中的一个函数中初始化它们。有没有更好的方法来保持我所有的常量或者这行得通?

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

4

4 回答 4

2

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

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

或者,您可以创建一个文本文件(Microsoft Scripting Runtime library -> class Scripting.TextStream),您可以在其中保存变量并在您希望阅读时加载它们。

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

让我知道,如果我遗漏了什么。

于 2009-07-27T18:10:29.757 回答
0

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

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

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

于 2009-07-27T18:06:18.050 回答
0

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

该模块现在可用于在该用户帐户下运行的所有 Excel 解决方案。

于 2009-07-30T00:03:21.170 回答