问题描述
我试图添加一个VBA项目Lib
作为第二个VBA项目App
的引用,并且默认的类成员不起作用。
这是VBA的限制吗?还是我需要做些什么才能使其正常工作?
以下是更多详细信息:
- 在
Lib
中,我用默认成员MyClass
定义了类DefaultMember
(通过使用文本编辑器向模块添加Attribute MyClass.VB_UserMemId = 0
来定义)。 - 我添加了
Lib
作为对App
的引用 - 我可以同时在
Dim X As MyClass
和Lib
中使用App
。 - 在
Lib
中,这些等效:X.DefaultMethod(123)
和X(123)
。 - 在
App
中,此方法有效:X.DefaultMethod(123)
,但无效:X(123)
。
编辑
结果是我与类名发生冲突,并且一切正常,按预期进行:具有默认成员的类的某些名称也用于其他引用的库中。也许在添加了新的Lib
作为参考之后,默认的MyClass
突然改变了,并成为了另一个没有默认成员的库中定义的默认值。
解决方法
属性表。VB_UserMemId= 0不正确。
应该是
属性DefaultMember.VB_UserMemId = 0
属性行应位于DefaultMember方法中。
如果您打算做更多的事情,我会为VBA安装出色的RubberDuck插件,并使用'@DefaultMember批注。
更新
这是一个对外部库(Word模板中的VBA)正常工作的引用示例。
代码
Option Explicit
Sub Test()
Dim myStro As StrO
Set myStro = StrO.Make("A random comment ->")
Set myStro = myStro.Merge(-1,"Hello","There","World")
Debug.Print myStro
End Sub
放置在Normal模块中可以正确执行以提供输出
随机评论-> HelloThereWorld
上面未显示的是“ Set c.cvt = Convertorproj.convertor”,它位于Stro对象的初始化代码中,并且stro对象的默认成员为.Value。