关于vba:Excel集合变量

Excel Collection Variable

假设我们有两个关于VBA功能的工作簿相同;但是,数据集将有所不同。 VBA代码将一些数据存储在集合变量上,以方便计算。通过同一工作簿中的不同模块调用此变量。由于此变量在另一个工作簿上也存在,并且这两个工作簿不应共享相同的集合值,因此我们如何确保对集合的调用将仅从其自己的工作簿中提取该变量?

声明集合变量时,声明"选项专用模块"是否足够?如:

1
2
Option Private Module
Public DataCol As New Collection

谢谢。


可能不是个问题...

假设您有两个相同的工作簿:

  • Book1.xlsm,并且,
  • Book2.xlsm

...并且都具有相同的名为X的公共变量设置。

除非您已将引用从Book1显式设置为Book2,否则Book1不能"看到" XBook2中存在的其他变量/常量/等。

img

例如,设置参考的一种方法是,在Book1中,您进入了"工具">"参考">"浏览"并选择了工作簿Book2.xlsm

img

即使您确实在工作簿之间设置了引用,并且两者都具有名为X的变量,Book1始终会在自身内部查找X,然后再查找其他位置。您必须对变量进行限定,例如:

1
Applications.Workbooks("Books2.xlsm").X

这适用于所有参考文献;如果您的工作簿中有与"连接的"引用相同的名称,则在外部查看连接的引用之前,在工作簿中运行的代码先在过程中"查找",然后在模块中,然后在工作簿中"查找"。

VBA不太可能在错误的工作簿中引用变量。

如果您经常打开两个相同的工作簿,则很有可能会在不正确的工作簿中意外地编写或执行代码,(我已经这样做了,这很烦人-尤其是当您关闭时


是的。

将模块声明为Option Private Module会将在该模块中声明的"公共"变量的范围限制为该特定项目。这类似于类中的Friend范围,并且类似于.NET中的internal static