在VBA中使用类模块时,如果在Private Sub
前面使用Me
,Public 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}}
答案 0 :(得分:1)
这不是一个非常令人满意的答案,但这就是MS编程Me界面的方式。它可能不是某人做出的特定选择,只显示面向公众的属性和方法。显然,更好的用户体验是暴露私人和公共。相反,这只是我实施方式的副作用。
Me界面可能会说“确定我所在的对象类型,创建该对象的实例,并公开该对象实例。”该对象实例仅显示公共内容,就像您在另一个模块中创建和对象实例一样。
当'Me'创建实例时,没有机制来暴露私有东西,而不是在创建实例时。如果他们想要这样做,他们将不得不将一些标志传递给类构建器,该类构建器指示它是通过Me接口还是其他东西构建的。如果设置了标志,则公开私有内容,否则不要。即使他们想到了这一点,他们也许不会实现它。这是额外的复杂性,有人会提出你可以输入程序名称的观点。
我不为MS工作或对此有任何特殊了解。这只是我猜测为什么没有明显有用的功能。