我试图在 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
但是,当我尝试打电话时Application.Run
我收到以下错误:
编译错误:
“只有在公共对象模块中定义的用户定义类型才可以
强制到变体或从变体强制转换或传递到后期绑定函数”
我已经尝试将我的用户定义类型放入Class Module
但它基本上说类模块是类型的错误位置。
该错误来自成熟的 VB,您可以在其中创建一个 ActiveX dll 项目,在其中创建一个公共类并将 UDT 放入该类中。
在 VBA 中,当您需要强制转换为变体或强制转换为变体时,可以使用类而不是 UDT。
因此,只需声明一个包含 UDT 中所有字段的类,然后删除 UDT。
或者,在 VB6 中创建一个仅包含类型声明的 DLL,并从 VBA 引用该 DLL。或者,如果您熟悉 IDL,只需直接创建 TLB 文件即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)