什么是VBA中的公共对象模块?

lee*_*d00 8 oop excel vba excel-vba

我试图在VBA中尽可能接近函数指针/抽象类.

我有一个叫做的课程,VerificationManager并在几个电子表格中验证了一堆单元格.这将以不同的方式完成,具体取决于与其一起使用的信息和电子表格.

我希望能够通过使用该Application.Run函数指定要在字符串中调用的方法来使代码可重用.所以我可以重写改变的功能.

现在如果我使用Java或C#,我将能够扩展一个抽象类并重写内部函数.如果我使用JavaScript,我可以在变量中存储一个函数,并将变量传递给类并从那里调用它.

在我的课程中,我有一个名为"verificationModule"的公共属性,我将其设置为我希望它调用的函数的名称.

Sub VerifyWorkLocations(empLoc As EmployerLocation)
...
    For i = 0 To empLoc.numOfEmp
        Application.Run verificationModule, empLoc.taxdescmatch, empLoc.employees(i)
    Next i
...
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试呼叫时,Application.Run我收到以下错误:

编译错误:

"只有在公共对象模块中定义的用户定义类型才能被强制转换为变量或从变量强制传递到后期绑定函数"

我已经尝试将我的用户定义类型放在一个Class Module但它基本上说类模块是一个类型的错误位置.

GSe*_*erg 8

错误来自成熟的VB,您可以在其中创建ActiveX DLL项目,在那里创建公共类并将UDT放入该类.

在VBA中,当您需要强制转换变量时,可以使用类而不是UDT.

因此,只需声明一个包含UDT中所有字段的类,然后删除UDT.

或者,在VB6中创建一个DLL,它只包含该类型的声明,并从VBA引用该DLL.或者,如果您对IDL感到满意,只需直接创建TLB文件即可.