VBA选项专用模块等效,但仅适用于类模块中的单个功能?

时间:2012-05-30 16:15:13

标签: excel-vba excel-addins private-methods vba excel

在VBA中,我知道如果您希望只在当前项目中访问子/函数,您可以将这些方法放入标记为Option Private Module的模块中。

但是如果我想在类模块中使用某种方法来做这件事呢?我可以从一个类中分离出一个方法吗?

具体来说,我在我的一个类中有一个属性我想要是只读的,除非它在当前项目中使用。该类中还有其他属性/子/功能,我希望它们真正公开。

我认为Friend Property Let...可能是正确的方法,但是当我尝试它时,它不会阻止同一个打开的Excel会话中的另一个项目分配给该属性。 所以我正在为类中的一个函数子集寻找等价的Option Private Module

这可能吗?


解决这个问题的另一种方法是:你能在多个子模块上传播一个类模块吗?

1 个答案:

答案 0 :(得分:3)

由于在这个问题上没有太多的眼球,我甚至可能没有表达得很好,我只是想我会发布如何在此期间为后代决定解决这个问题。

VBA中的类只能是PrivatePublicNotCreateable,因此我已经使用工厂方法来创建对象。
我刚刚在工厂方法中添加了一些代码,为每个对象分配一个唯一的标识符,并在我自己独立的数据结构中跟踪项目范围的伪属性。 类具有属性的“获取”,但要分配给它,需要调用Option Private Module模块中的特殊项目范围函数。
不是一个完美的解决方案,但至少它做了我想要的。