【问题标题】:Add a .NET EXE as a VBA Reference (within Excel) for COM Interop添加 .NET EXE 作为 COM 互操作的 VBA 引用(在 Excel 中)
【发布时间】:2017-04-28 10:16:02
【问题描述】:

如何在 Excel (VBA) 中使用可执行形式的 C# 项目?

在 Visual Studio 中,如果我转到我的项目设置并将“输出类型”更改为“类库”,那么我可以成功地在 Excel VBA 中添加对我的项目的引用(通过浏览到引用部分中的 DLL )。

但是,当我的“输出类型”设置为“Windows 应用程序”时,如果我尝试向新生成的 EXE 文件添加引用(在 Excel VBA 中),我会收到以下错误:

无法添加对指定文件的引用

如何在 Excel VBA 中引用我的 .NET EXE?

(我使用 exe 而不是 DLL 的目的是让我的应用程序既可以用作 Windows 应用程序,也可以用作 COM 对象)

【问题讨论】:

    标签: c# .net excel vba com


    【解决方案1】:

    在不知道确切细节的情况下,我只是猜测 DLL 导出 Excel 所需的函数。 EXE 通常不会导出任何函数。

    .NET 的好处是您可以轻松创建模块化应用程序。那么为什么不将核心功能放入 DLL 并创建一个可以使用该功能的应用程序呢?

    这样您就可以使用 VBA 中的 DLL,并且仍然有一个可以独立使用的应用程序。

    【讨论】:

    • 感谢您的回答。我不确定this guy is correct 是否可以,但他声称您可以引用一个.Net 可执行文件,就像它是一个dll 一样, 如果可能的话,我不希望部署2 个单独的项目。如果我可以只发送一个 exe 会更干净。
    • 可以在任何其他 .NET 项目中添加任何 .NET 程序集作为引用,这是真的。 .NET 不关心它是扩展名为 .exe 还是 .dll 或 .blurb 的程序集,只要它是 .NET 程序集即可。但这与在 Excel VBA 中使用 .NET DLL 有很大不同!
    • 知道了。我似乎记得 VBA 可以引用一个 VB6 EXE,但对于 .NET VBA 通信来说,类似的东西可能是不可能的。在 .NET 项目属性的 Assembly Information 中实际上有一个选项,可让您设置“使程序集 COM-Visible”。此选项也适用于 Windows 应用程序,但可能仅适用于 DLL。
    • 要引用一个 VB6 EXE,它必须被编译为一个“ActiveX 可执行文件”,它实际上是一个进程外的 COM 服务器,你可以在 .Net 中执行此操作,但它笨重且无处可去与 Thorstens 建议的通用程序集和卫星 .Net EXE 差不多。
    • 好的,感谢您的建议 - 现在我将部署一个单独的 DLL,但将来会考虑将其共享到一个代码库中。
    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 2010-12-25
    • 1970-01-01
    • 2014-10-02
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多