在VBA中,我知道如果您希望只在当前项目中访问子/函数,您可以将这些方法放入标记为Option Private Module
的模块中。
但是如果我想在类模块中使用某种方法来做这件事呢?我可以从一个类中分离出一个方法吗?
具体来说,我在我的一个类中有一个属性我想要是只读的,除非它在当前项目中使用。该类中还有其他属性/子/功能,我希望它们真正公开。
我认为Friend Property Let...
可能是正确的方法,但是当我尝试它时,它不会阻止同一个打开的Excel会话中的另一个项目分配给该属性。
所以我正在为类中的一个函数子集寻找等价的Option Private Module
。
这可能吗?
解决这个问题的另一种方法是:你能在多个子模块上传播一个类模块吗?
答案 0 :(得分:3)
由于在这个问题上没有太多的眼球,我甚至可能没有表达得很好,我只是想我会发布如何在此期间为后代决定解决这个问题。
VBA中的类只能是Private
或PublicNotCreateable
,因此我已经使用工厂方法来创建对象。
我刚刚在工厂方法中添加了一些代码,为每个对象分配一个唯一的标识符,并在我自己独立的数据结构中跟踪项目范围的伪属性。
类具有属性的“获取”,但要分配给它,需要调用Option Private Module
模块中的特殊项目范围函数。
不是一个完美的解决方案,但至少它做了我想要的。