使用“我”时,为什么对类模块私有子的调用失败?

时间:2013-12-20 11:22:50

标签: class vba

在VBA中使用类模块时,如果在Private Sub前面使用MePublic Sub的调用会失败,但调用Method or data member not found是否正常? / p>

例如,下面的代码(不是完整的类模块,只是一个snippit)会产生错误Call Me.SetupQuote或行SetupQuote()

但是,如果我Public Sub Private Sub一切都很好。当一个类模块从内部调用时,如果该子类是公共的还是私有的,那么这不重要吗?

我意识到我可以在不使用Me的情况下调用Private Sub Class_Initialize() Me.QuoteID = 15 Call Me.SetupQuote End Sub Private Sub SetupQuote() Set Quote = New classQuote Call Quote.SetQuote(Me.QuoteID) End Sub ,但我想了解为什么VBA会以这种方式运行。感谢。

{{1}}

1 个答案:

答案 0 :(得分:1)

这不是一个非常令人满意的答案,但这就是MS编程Me界面的方式。它可能不是某人做出的特定选择,只显示面向公众的属性和方法。显然,更好的用户体验是暴露私人和公共。相反,这只是我实施方式的副作用。

Me界面可能会说“确定我所在的对象类型,创建该对象的实例,并公开该对象实例。”该对象实例仅显示公共内容,就像您在另一个模块中创建和对象实例一样。

当'Me'创建实例时,没有机制来暴露私有东西,而不是在创建实例时。如果他们想要这样做,他们将不得不将一些标志传递给类构建器,该类构建器指示它是通过Me接口还是其他东西构建的。如果设置了标志,则公开私有内容,否则不要。即使他们想到了这一点,他们也许不会实现它。这是额外的复杂性,有人会提出你可以输入程序名称的观点。

我不为MS工作或对此有任何特殊了解。这只是我猜测为什么没有明显有用的功能。