.net CLR 在 VBA (Access) 中的后期绑定

Posted

技术标签:

【中文标题】.net CLR 在 VBA (Access) 中的后期绑定【英文标题】:Late binding of .net CLR in VBA (Access) 【发布时间】:2015-05-03 23:35:07 【问题描述】:

在下面的文章中,它展示了如何使用 VBA,创建 CLR 的实例,从而调用/使用/使用 .net COM 对象,而无需注册此类对象。

Side-By-Side COM Interop with C# and VBA

我希望替换此代码:

Dim Host As mscoree.CorRuntimeHost
Set Host = New CorRuntimeHost

Set Host = createObject("mscoree.CorRunTimeHost")

我找不到“类”名称。

也就是说,我想后期绑定CLR。有谁知道是否可以使用 VBA CreateObject() 来代替从 VBA 对上述 mscore 的硬引用

VBA->工具中设置的“参考”是

C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoree.tlb

实际上,我希望通过 CreateObject() 后期绑定使用 .net CLR

【问题讨论】:

类名不是CorRuntimeHost吗? CreateObject("mscoree.CorRunTimeHost") 是否将Host 设置为Nothing 我的猜测是,如果不在注册表中添加对 typelib 的 COM 引用,就无法完成。如果我打电话给Debug.Print TypeName(Host),它会报告Unknown 您对此的一个很好的破解-我相信您是正确的-注册表中没有类型库-我不能后期绑定。但是,如果 mscoree.tlb 不是托管代码,则有可能! 【参考方案1】:

我相信您可能需要先注册 typelib(无法确认 ATM,因为我在寻找类名之前使用了 regtlibv12.exe 注册它)。类名似乎是“CLRMetaData.CorRunTimeHost”。

【讨论】:

欣赏类名 - 不幸的是 CreateObject 仍然不起作用 - 我非常同意并怀疑你是正确的 - 问题是这样的对象需要 regasm /codebase 才能工作。当然,避免在锁定的机器上注册任何东西是这篇文章的主要原因。有趣的是,Access VBA 中的引用集有效,但允许 CreateObject 无效。

以上是关于.net CLR 在 VBA (Access) 中的后期绑定的主要内容,如果未能解决你的问题,请参考以下文章

将基于 Access 的 VBA 工具迁移到独立的 .Net 应用程序会提高性能吗?

如何将 VBA 迁移到 asp.net

将 MS Access VBA 应用程序转换为 .NET Visual Studio 项目

如何在 Microsoft Access 中通过 VBA 设置 INSERT SQL 查询的参数值?

在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA

如何检查 VB.NET 代码中 Access SysCmd 失败的原因?