在VBA中调用.NET编写的DLL(动态链接库)通常涉及使用COM Interop(组件对象模型互操作性)来桥接VBA和.NET之间的鸿沟。这通常意味着你需要将.NET DLL公开为COM可见的对象,以便VBA能够与之交互。 以下是一个概述性的步骤,用于在VBA中调用.NET DLL: 1. 编写.NET DLL首先,你需要有一个.NET DLL,它包含你想要在VBA中使用的功能。确保这些功能通过公共接口(如类或接口)暴露出来。 2. 使.NET DLL COM可见要使.NET DLL能够被VBA访问,你需要使用特定的属性来标记你想要公开的类和方法。这通常涉及使用[ComVisible(true)]和[Guid('...')]等属性。 3. 生成类型库(.tlb文件)一旦你的.NET DLL是COM可见的,你可以使用tlbexp.exe工具(它是.NET Framework的一部分)来生成一个类型库(.tlb文件)。这个类型库描述了DLL中公开的COM类型和接口,VBA将使用它来理解如何与DLL交互。 4. 在VBA中引用DLL在VBA编辑器中,通过“工具”>“引用”来添加对刚才生成的.tlb文件的引用。一旦添加了引用,你就可以在VBA代码中创建和使用DLL中公开的对象了。 5. 调用DLL中的方法一旦你在VBA中添加了对DLL的引用,你就可以像使用其他VBA对象一样使用它。你可以创建DLL中公开类的实例,并调用其方法。 注意事项:
接下来按照上述步骤创建一个完整的库用来在VBA调用。 在Visual Studio创建DLL该DLL对外提供MD5函数,弥补VBA没有MD5函数的不足。 DLL名:VBADotNetLibrary.dll Class名:Tools 方法名:MD5 参考代码如下。需要在visual studio中输入该代码,然后编译成DLL。 using System;using System.Runtime.InteropServices;using System.Security.Cryptography;using System.Text;/** * 1, 在Visual Studio开始菜单中找到 Developer Command Prompt for VS 2022 * 2, 切换到dll目录 * 3, 根据dll生成对应的tlb。tlbexp xx.dll * 4, 注册dll。regasm /codebase xx.dll * 5, 在vba中浏览并引用对应的tlb文件 * */namespace VBADotNetLibrary{ [ComVisible(true)] [Guid('E5C41D4C-C874-418A-8A3F-04FD183B7596')] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IMyInterface { [ComVisible(true)] string md5(string name); } [ComVisible(true)] [Guid('591BF508-A3F1-4C89-990B-A00A164820A0')] [ClassInterface(ClassInterfaceType.None)] public class Tools:IMyInterface { /// <summary> /// MD5函数 /// </summary> /// <param name='src'>待MD5编码文本</param> /// <returns></returns> public string md5(string src) { // 创建一个MD5CryptoServiceProvider对象 using (MD5 md5Hash = MD5.Create()) { // 将输入字符串转换为字节数组 byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(src)); // 创建一个StringBuilder对象来收集字节并创建字符串 StringBuilder sBuilder = new StringBuilder(); // 遍历数据中的每个字节并格式化为十六进制字符串 for (int i = 0; i < data.Length; i ) { sBuilder.Append(data[i].ToString('x2')); } // 返回十六进制字符串 return sBuilder.ToString(); } } }} 生成tlb格式组件在Visual Studio开始菜单中找到 Developer Command Prompt for VS 2022,或者其他版本,用管理员权限运行。切换到生成好的DLL文件所在目录,运行tlbexp命令,生成tlb文件。DLL名字换成自己库的名字。
注册DLL还是在DLL所在目录,注册我们刚刚生成的DLL文件。 regasm /codebase VBADotNetLibrary.dll 在VBA中引用组件在VBA编辑器中,点击菜单 工具 -> 引用,在弹出对话框中选择生成的tlb文件,完成组件引用。 调用DLL参考以下方式,调用DLL中的方法。
|
|