我的目标是创建一个可以导入VBA(Excel)并在那里使用的COM可见类型。
Excel 对象浏览器可以看到我的类,但看不到该类的任何公共方法,并且在尝试调用公共方法时失败。
我的 F# 代码:
namespace DotNetLibrary
type public Class1() =
member public this.DotNetMethod (x:string) = "Hello" + x
在AssemblyInfo.fs中,我也修改为[<assembly: ComVisible(true)>]
我用/codebase /tlb
开关运行 regasm 并生成一个 .tlb 文件。
VBA 在引用浏览器中找到我的库,但不会选取上面Class1
中定义的DotNetMethod
。
我已尝试遵循本主题的 C# 指南来达到我目前所处的位置,但我没有到达终点线。
错误
VBA 无法成功运行该方法的原因是因为我使用了 32 位版本的 regasm 实用程序而不是 64 位版本来注册 COM 的类型库。鉴于我使用的是 64 位 Excel,它需要 64 位 COM 类型库。
编译时问题
VBA 无法识别 IDE 中的方法的原因可能与上述原因有关,但也可能是由于@HansPassant在他上面的评论中。