导入此类:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "MyMsgBox"
Attribute VB_PredeclaredId = True
Public Function Show(testo As String) as Boolean
Attribute Show.VB_UserMemId = 0
msgbox testo
Show = True
End Function
并在模块中执行以下代码:
MyMsgBox.Show "hi"
If MyMsgBox("hi") = True Then msgbox "it works"
MyMsgBox "hi" ' << I get "Compile error: Invalid use of property"
为什么最后一行给出错误?
最有效的替代方法是什么?
默认成员是邪恶的,隐式的和令人困惑的代码。像帮助这样的Rubberduck注释@DefaultMember
使隐藏的属性更加可见,但是API仍然是一种奇怪的,非常规的,非惯用的VBA代码。
带有单个参数的默认成员应命名为Item
,其参数为Index
封装集合的-类本身将是一些自定义集合类。
每次使用默认成员都会归结为滥用。
有关更多信息,请参见《现代VBA最佳做法:默认成员》。
现在清除了...
由于该VB_PredeclaredId = True
属性,调用默认成员的最短方法是:
?MyMsgBox("test")
这是因为MyMsgBox
是类的两个名称,并对该类类型的全球范围的对象变量的名称。请注意,如果不捕获返回值,则是“属性的无效使用”...。请注意,VBA是如何假设默认成员为Property
成员的。
您可以使用以下命令在IDE中获取默认成员的参数quick-info MyMsgBox(
:
到底为什么默认成员调用在本地实例(而不是默认实例)上正常工作的原因是模糊不清的-大概是VBA在这里变得混乱,可以理解的是:这是直接语言功能的滥用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句