2

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

但是如果我想用类模块中的某个方法来做到这一点呢?我可以从一个类中分离出一个方法吗?

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

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

这可能吗?


解决这个问题的另一种方法是:你可以将一个类模块分布在多个子模块上吗?

4

1 回答 1

3

由于这个问题没有多少人关注,而且我什至可能没有很好地表达它,我只是想我会在此期间发布我决定如何解决这个问题,以供后代使用。

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

于 2012-05-31T11:52:46.510 回答