Excel Collection Variable
假设我们有两个关于VBA功能的工作簿相同;但是,数据集将有所不同。 VBA代码将一些数据存储在集合变量上,以方便计算。通过同一工作簿中的不同模块调用此变量。由于此变量在另一个工作簿上也存在,并且这两个工作簿不应共享相同的集合值,因此我们如何确保对集合的调用将仅从其自己的工作簿中提取该变量?
声明集合变量时,声明"选项专用模块"是否足够?如:
1 2
| Option Private Module
Public DataCol As New Collection |
谢谢。
- 欢迎光临本站!请查看操作方法页面,以获取更多有关提出可以吸引高质量答案的问题的信息。您可以编辑问题以包括更多信息。您有尝试过的代码吗?通常,除非特别引用Workbooks("name").Something,否则您将不会从其他工作簿访问数据。
-
通常不需要在正常模块中将集合声明为公共集合。你为什么要那样做?
可能不是个问题...
假设您有两个相同的工作簿:
-
Book1.xlsm,并且,
-
Book2.xlsm
...并且都具有相同的名为X的公共变量设置。
除非您已将引用从Book1显式设置为Book2,否则Book1不能"看到" X或Book2中存在的其他变量/常量/等。
例如,设置参考的一种方法是,在Book1中,您进入了"工具">"参考">"浏览"并选择了工作簿Book2.xlsm。
即使您确实在工作簿之间设置了引用,并且两者都具有名为X的变量,Book1始终会在自身内部查找X,然后再查找其他位置。您必须对变量进行限定,例如:
1
| Applications.Workbooks("Books2.xlsm").X |
这适用于所有参考文献;如果您的工作簿中有与"连接的"引用相同的名称,则在外部查看连接的引用之前,在工作簿中运行的代码先在过程中"查找",然后在模块中,然后在工作簿中"查找"。
VBA不太可能在错误的工作簿中引用变量。
如果您经常打开两个相同的工作簿,则很有可能会在不正确的工作簿中意外地编写或执行代码,(我已经这样做了,这很烦人-尤其是当您关闭时
-
为那个看起来复古的示波器图投票。那东西属于布吉夜:)(这也是一个令人难以置信的答案)
是的。
将模块声明为Option Private Module会将在该模块中声明的"公共"变量的范围限制为该特定项目。这类似于类中的Friend范围,并且类似于.NET中的internal static。
- 除非OP明确创建对第二个工作簿的引用,否则Option Private Module不会带来任何好处。即使有引用,如果两个项目的变量名称相同,则必须将外部项目名称包含在变量中才能引用它。
-
@ashleedawg我没有说以这种方式使用它有好处,我只是在解释它如何影响范围。
-
我意识到这一点,但是由于将其发布为您的答案,因此可能会向OP暗示这是他们应该做或将从中受益的事情。我感觉OP尚未创建任何工作簿间引用,这使make Option Private无用(尽管无害)。
-
@ashleedawg很公平,尽管您已经为我要解决的这个问题付出了更多的努力。