当前位置: 首页 > news >正文

C# 创建vba用的类库

目录

  • 一. 需求
  • 二. 初始化项目
  • 三. 项目代码
    • 3.1 `Tool.cs`主类
    • 3.2 `AssemblyInfo.cs`配置类
  • 四. 编译
  • 五. 将`.dll`类库注册到系统
  • 六. vba中使用

一. 需求

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

SubSendGetRequest()Consturl="https://api.github.com"' 创建http请求对象DimhttpAsObjectSethttp=CreateObject("WinHttp.WinHttpRequest.5.1")' 发送get请求http.Open"GET",url,Falsehttp.SendDebug.Printhttp.ResponseTextEndSub

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

SubMainSub()DimobjAsObjectSetobj=CreateObject("ToolLib.ToolCom")MsgBox obj.Hello("World")MsgBox obj.Add(3,5)EndSub

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

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

二. 初始化项目

🔷创建一个类库

dotnetnewclasslib-n ToolLib

🔷修改.csproj文件如下所示

<ProjectSdk="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 生成。
usingSystem.Runtime.InteropServices;namespaceToolLib{[ComVisible(true)][Guid("1D4C98EC-D988-4D6C-8DD6-189E238D7B4E")][InterfaceType(ComInterfaceType.InterfaceIsDual)]publicinterfaceIToolCom{intAdd(inta,intb);stringHello(stringname);}[ComVisible(true)][Guid("6143FB0B-9C17-4859-860C-6DA4A466ECD1")]// 显示声明ProgId, 便于vba通过 CreateObject("ToolLib.ToolCom") 创建对象[ProgId("ToolLib.ToolCom")][ClassInterface(ClassInterfaceType.None)]publicclassToolCom:IToolCom{publicintAdd(inta,intb){returna+b;}publicstringHello(stringname){return$"Hello,{name}";}}}

🔷生成GUID的方法

3.2AssemblyInfo.cs配置类

usingSystem.Reflection;usingSystem.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就可以正常使用该类库了。

http://www.jsqmd.com/news/673352/

相关文章:

  • 【C# 14原生AOT实战指南】:3步完成Dify客户端极简部署,告别IL打包时代!
  • Deepin 20.9 一键安装 Oracle 11GR2 单机
  • ESP32串口通信保姆级教程:从Echo到RS485,手把手教你玩转ESP-IDF的UART驱动
  • 别再手动敲命令了!用Ansible一键部署4节点MinIO高可用集群(附完整Playbook)
  • 2025 年宣布一件大事,Oracle 一键安装脚本开源了!
  • 武汉汽车后市场破局者:膜圣科技,用“汽服基因”重塑线上获客标准 - 速递信息
  • Debian 10 一键安装 Oracle 11GR2 单机
  • 北京律所 GEO 优化服务商避坑指南 品帮科技口碑良好 - 外贸老黄
  • CodeCombat如何用游戏化编程破解300万学生的编程学习难题?
  • Dify工业知识库配置速成指南:30分钟完成OPC UA协议文档接入,含JSON Schema自动生成脚本
  • 从 Google Cloud Storage 获取 ERA5 数据并转换为 Zarr 格式
  • 2026年市场富氢水杯公司,氢氧机/吸氢机/富氢水杯/纯氢机/氢水机/富氢水机/富氢泡浴机,富氢水杯实力厂家有哪些 - 品牌推荐师
  • 从冷战到海湾战争:聊聊‘长曲棍球’雷达卫星如何用合成孔径雷达(SAR)穿透云层和烟雾
  • Debian 10 一键安装 Oracle 19C 单机
  • 2026年4月变电综合数字化远传表计监测终端厂家推荐:智能在线监测IED/一次设备在线监测/综合自动化监测终端实力品牌深度解析 - 品牌推荐用户报道者
  • 从IP调用量看AI落地热力图:哪些城市的AI应用最活跃?
  • 2026年4月 三螺杆挤出机厂家TOP推荐:积木式/平行/改性塑料三螺杆挤出机品牌深度解析与选购指南 - 品牌推荐用户报道者
  • AI 时代,年轻人用手搓应用开启社交新玩法,“全民手搓”时代要来了?
  • Java项目Loom化失败率高达63%?(2026 Gartner调研首发:3个被90%团队忽略的阻塞调用陷阱)
  • 做了几年 Oracle DBA,聊聊这行的真实状态
  • 测试架构师核心能力:缺陷预防设计
  • SAP 中供应商预付款业务主要涉及 FI 财务模块与 MM 物资模块,核心通过特殊总账标志实现统驭科目切换,业务流程涵盖订单创建到预付款清算的全环节
  • SQL多表关联查询中提升可读性的规范_合理缩进与表别名定义
  • MSP432P401R开发第一步:在CCS里正确导入DriverLib库并配置头文件路径(避坑指南)
  • 测试文章3 - API抓包
  • Dify合规问答配置失效真相:3家持牌机构被罚案例背后的2个底层配置逻辑漏洞
  • JUnit 5单元测试(三)—— Mockito 模拟实战:从零构建隔离测试环境
  • 告别鼠标!用这20个iTerm2快捷键,让你的Mac终端效率翻倍(保姆级配置指南)
  • V4L2调试不止抓图:用这些命令深挖Camera子系统和事件监听(以RK ISP为例)
  • 别再死记硬背Attention公式了!用Python+PyTorch手撕一个Hierarchical Attention Network(HAN)