在用作外部参考的VBA项目中使用默认类成员

问题描述

我试图添加一个VBA项目Lib作为第二个VBA项目App的引用,并且认的类成员不起作用。

这是VBA的限制吗?还是我需要做些什么才能使其正常工作?

以下是更多详细信息:

  • Lib中,我用认成员MyClass定义了类DefaultMember(通过使用文本编辑器向模块添加Attribute MyClass.VB_UserMemId = 0来定义)。
  • 添加Lib作为对App的引用
  • 我可以同时在Dim X As MyClassLib中使用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)正常工作的引用示例。

enter image description here

代码

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。