c# - 从 VBA (Excel) 访问 VSTO 应用程序插件类型

标签 c# vba excel vsto

我们有一个用于 Excel 的 VSTO 应用程序插件(不是文档插件),我们想向 VBA 代码公开一个事件,以便 VBA 宏可以在插件中触发此事件时执行一些操作。如何获取 VBA 代码以订阅 VSTO 应用程序插件中定义的事件?

我想既然插件是在Excel进程中加载​​的,这应该不会太棘手,但还没有找到办法。

顺便说一句,使用 VS 2008 和 Excel 2007。

谢谢!

最佳答案

VSTO 不是一般可以从其他DLL 调用的DLL。 VSTO 基本上是在单独的 AppDomain 中运行的包装器中运行的 COM 公开 .NET 代码。虽然 VSTO 加载项在技术上是一个正在加载到 Excel 中的 DLL,但它的运行更像是一个顶级 EXE,而不是作为向其他调用方公开的 DLL 库。

就个人而言,我会创建一个标准的 .NET 程序集——也就是说,避免为此使用 VSTO——并使用正确的属性将其公开给 COM。该过程在这里得到了很好的解释:COM Interop Exposed - Part 2 ,在标题为“向 COM 公开 .NET 事件”的部分下。

如果您真的坚持让 VBA 能够调用 VSTO,那么您将不得不通过 Office.COMAddIn.Object 属性进行操作,该属性通过覆盖 RequestComAddInAutomationService< 启用 方法。文章 VSTO Add-ins, COMAddIns and RequestComAddInAutomationService 中详细讨论了该过程作者:安德鲁·怀特查佩尔。

希望对您有所帮助!

迈克

关于c# - 从 VBA (Excel) 访问 VSTO 应用程序插件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474205/

相关文章:

c# - 为什么泛型类型约束会导致无隐式引用转换错误?

c# - 如何获取记事本文件保存位置

javascript - 如何从 C# 添加数据到动态添加的下拉列表

excel - 创建新 Excel.Application 时出现运行时错误 "Element not found"

excel - 如何为同一变量分配更多范围?

VBA For loop until column is empty 问题

excel - 基于if语句VBA动态隐藏行

c# - 如何使用C#查找经纬度

excel - 获取列中最常用的 10 个名称

vba - VBA (excel) 文本框的高级文本编辑