C# 创建vba用的类库

 更新时间:2026年04月22日 10:14:12   作者:fengyehongWorld  
本文详细介绍了如何在VBA中使用C#编写的COM组件,首先创建一个C#项目,定义ComVisible特性和生成GUID,然后修改.csproj文件并编译生成.dll文件,之后将该.dll文件注册到系统,最后在VBA代码中使用CreateObject方法创建该对象并调用其方法

一. 需求

🔷写vba代码的时候,会想下面这样使用CreateObject创建一个对象,然后使用其中的方法

Sub SendGetRequest()
    Const url = "https://api.github.com"
    ' 创建http请求对象
    Dim http As Object
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    ' 发送get请求
    http.Open "GET", url, False
    http.Send
    Debug.Print http.ResponseText
End Sub

🔷先要求在vba中使用CreateObject("ToolLib.ToolCom")创建一个对象,然后使用其中的方式。

Sub MainSub()
    Dim obj As Object
    Set obj = CreateObject("ToolLib.ToolCom")
    MsgBox obj.Hello("World")
    MsgBox obj.Add(3, 5)
End Sub

🔷用C# 写一个能被VBA调用的COM组件,把.NET类暴露成COM可见对象。

  • C#写类
  • 标记为COM可见
  • 编译成DLL
  • 注册到系统(regasm)
  • VBA 通过CreateObject调用

二. 初始化项目

🔷创建一个类库

dotnet new classlib -n ToolLib

🔷修改.csproj文件如下所示

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
	<!-- 推荐用 .NET Framework -->
    <TargetFramework>net48</TargetFramework>
	<!-- 关闭自动注册 -->
    <RegisterForComInterop>false</RegisterForComInterop>
	<!-- 关闭自动生成AssemblyInfo -->
	<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
	<!-- 不输出调试信息 -->
    <DebugType>none</DebugType>
  </PropertyGroup>
</Project>

三. 项目代码

3.1Tool.cs主类

🔷Tool.cs

  • [ComVisible(true)]:设置Com可见, 否则vba无法使用
  • [Guid("xxxxx-xxxx-xxxx-xxxxxxx")]:类库的唯一标识符,可以使用 Visual Studio 生成。
using System.Runtime.InteropServices;
namespace ToolLib
{
	[ComVisible(true)]
	[Guid("1D4C98EC-D988-4D6C-8DD6-189E238D7B4E")]
	[InterfaceType(ComInterfaceType.InterfaceIsDual)]
	public interface IToolCom
	{
		int Add(int a, int b);
		string Hello(string name);
	}
	[ComVisible(true)]
	[Guid("6143FB0B-9C17-4859-860C-6DA4A466ECD1")]
	// 显示声明ProgId, 便于vba通过 CreateObject("ToolLib.ToolCom") 创建对象
	[ProgId("ToolLib.ToolCom")]
	[ClassInterface(ClassInterfaceType.None)]
	public class ToolCom : IToolCom
	{
		public int Add(int a, int b)
		{
			return a + b;
		}
		public string Hello(string name)
		{
			return $"Hello, {name}";
		}
	}
}

🔷生成GUID的方法

3.2AssemblyInfo.cs配置类

using System.Reflection;
using System.Runtime.InteropServices;
// 文件→属性→详细信息→文件说明
[assembly: AssemblyTitle("ToolLib_Test")]
// vba→工具→引用 时显示的信息
[assembly: AssemblyDescription("FengYeHong VBA COM Library")]
[assembly: AssemblyCompany("FengYeHong-Company")]
// 文件→属性→详细信息→产品名称
[assembly: AssemblyProduct("ToolLib_for_vba")]
// 非常重要
// 类型库 GUID
[assembly: Guid("9F3E7D2C-1234-4A56-8888-ABCDEF123456")]
// 文件→属性→详细信息→产品版本
[assembly: AssemblyVersion("1.0.0.1")]

四. 编译

🔷该工程要生成的是一个类库,因此需要通过编译生成所需的.dll文件

五. 将.dll类库注册到系统

🔷篇幅较长,不在此篇文章展开,详情请参考下面这篇文章。

Powershell 注册.dll类库到系统

六. vba中使用

🔷当.dll类库注册到系统之后,vba就可以正常使用该类库了。

到此这篇关于C# 创建vba用的类库的文章就介绍到这了,更多相关C# 创建vba类库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中泛型容器Stack<T>的用法并实现”撤销/重做”功能

    C#中泛型容器Stack<T>的用法并实现”撤销/重做”功能

    这篇文章介绍了C#中泛型容器Stack<T>的用法并实现”撤销/重做”功能,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C# log4net日志库的用法小结

    C# log4net日志库的用法小结

    log4net日志开源库是用来控制日志文件大小,日志文件个数,滚动式覆盖,自由控制日志打印等级,今天通过本文给大家介绍C# log4net日志库的用法小结,感兴趣的朋友一起看看吧
    2021-10-10
  • Winform圆形环绕的Loading动画实现代码

    Winform圆形环绕的Loading动画实现代码

    这篇文章主要介绍了Winform圆形环绕的Loading动画实现代码,有需要的朋友可以参考一下
    2014-01-01
  • 在.NET平台使用C#为PDF添加各种类型的表单域的方法

    在.NET平台使用C#为PDF添加各种类型的表单域的方法

    在日常办公系统开发中,涉及 PDF 处理相关的开发时,生成可填写的 PDF 表单是一种常见需求,与静态 PDF 不同,带有**表单域的文档支持用户直接在 PDF 内部输入、勾选、选择等交互操作,本文将介绍如何使用 C# 为 PDF 添加各种类型的表单域,需要的朋友可以参考下
    2025-05-05
  • C#使用foreach遍历哈希表(hashtable)的方法

    C#使用foreach遍历哈希表(hashtable)的方法

    这篇文章主要介绍了C#使用foreach遍历哈希表(hashtable)的方法,是C#中foreach语句遍历散列表的典型应用,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • Unity控制指针旋转到指定位置

    Unity控制指针旋转到指定位置

    这篇文章主要为大家详细介绍了Unity控制指针旋转到指定位置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Unity动画混合树实例详解

    Unity动画混合树实例详解

    这篇文章主要为大家详细介绍了Unity动画混合树实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C#获取Excel第一列的实例方法

    C#获取Excel第一列的实例方法

    在本篇文章里小编给各位分享了关于C# 怎么获取Excel第一列的实例方法和代码,需要的朋友们可以学习下。
    2019-08-08
  • C#实现图像选择验证码的示例代码

    C#实现图像选择验证码的示例代码

    为了防止网站被非法登陆,网站一般通过验证码的方式,防止黑客用软件非法登陆,本文主要介绍了C#实现图像选择验证码的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C#连接Mysql实现增删改查的操作

    C#连接Mysql实现增删改查的操作

    在IT行业中,数据库连接是应用程序开发中的重要环节,尤其是在使用C#进行Windows或者Web应用开发时,经常需要与各种数据库进行交互,其中就包括广泛使用的MySQL,本篇将详细讲解如何使用C#语言来连接MySQL数据库,以实现数据的读取、写入和其他操作
    2024-09-09

最新评论