ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 69619|回复: 135

[分享]DLL文件制作与在VBA调用初级进阶

[复制链接]

TA的精华主题

TA的得分主题

发表于 2004-2-29 00:36 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

DLL文件制作与在VBA调用初级进阶

作者:ldhyob 日期:2004.02

本文用一简例来演示如何将一正常在VBA中运行的代码移植到VB制作的DLL中去,并介绍如何在VBA中进行调用。这仅仅是最初级的介绍,希望能对此内容想了解的版友们一些帮助,而已掌握该技术的FANS们完全可以跳过本文。

先来了解一下什么是DLLDLLDynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。DLL文件一般被存放在C:\Windows\System目录下。

因此,DLL文件可以看作是一个程序扩展函数库,成为应用软件程序的外挂接口。就象我们常在程序中用的WINDOWS API,就是如此,它是微软提供给程序员的函数宝库,用户只需了解函数功能与调用规则就可以拿来使用,而不用知道也不需要知道具体源码。也正因为此,现在许多VBA开发者在保护其代码时也多采用此法来维护其合法权益。

(因发帖文本限制,后见下帖...)

[此贴子已经被作者于2004-2-29 0:37:21编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-2-29 00:39 | 显示全部楼层
现在开始。假如我们要编这么一段代码:将工作表Sheet1的A1单元格的数值与B1单元格的数值相加填写到C1单元格去(嘿嘿,这是极简单的了,只是用来说明问题),在VBA模块我们可以编写这样的代码: Sub test() On Error Resume Next Dim i, j As Integer With Worksheets("Sheet1") i = .Cells(1, 1).Value j = .Cells(1, 2).Value .Cells(1, 3) = i + j End With End Sub 执行上面的宏,会发现C1单元格自动会出现A1+B1的结果了。 下面我们在VB中生成包含以上宏功能的函数(子程序)的DLL文件。打开VB,“文件”-“新建工程”-“ActiveX DLL”,此时会弹出class1模块代码窗口,将如下代码写入: Sub test() On Error Resume Next Dim i, j As Integer Dim EB Set EB = GetObject(, "Excel.Application") With EB.ActiveSheet i = .Cells(1, 1).Value j = .Cells(1, 2).Value .Cells(1, 3) = i + j End With Set EB = Nothing End Sub 在生成DLL之前,注意确保VB里"工程"---"引用"里"Microsoft Excel 9.0 Object Library"前面的勾已打上,再就是正确设定好DLL描述与名称。菜单“工程”----“工程属性”---“工程描述”,里面可以写上你的DLL功能名称或简介或版本号。“视图”---“属性”,设定名称为你在其他开发环境中欲使用的引用名称,如“Mytest”。好,现在点击菜单“文件”---“生成…dll”,会弹出路径与文件取名窗,按你的意思选择与输入好路径和即将生成的DLL文件名,按确定就会完成DLL的生成工作。 此时DLL已生成在你指定的目录下了,当前工程保不保存就随便你自己了,如果以后还想再编辑修改的话,当然得取个文件名保存好:)。生成的DLL如果正确的话,VBA中只要引用后就可正常调用了。 (后续下帖...)

[此贴子已经被作者于2005-9-1 16:27:41编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-2-29 00:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

现在回到EXCEL VBA开发环境中来,先对刚生成的DLL进行一下引用。关于引用,可以手工引用,也可以用代码来做。手工引用的步骤是:在VBE窗口中,菜单“工具”---“引用”,会弹出如下窗口:

“浏览”到刚才生成的DLL,选择打勾确定即可。代码引用: Shell "regsvr32 /s " & "…………..dll", vbHide,加s参数是防止出现确认窗口,影响界面。取消引用则使用/u参数。

然后在VBA中写调用的代码:

Sub DLLtest()

Dim abc As New Mytest ‘定义abc为新类,即在DLL文件中定义的

abc.test ‘调用DLL中提供的过程,来完成原来在VBA中的功能,起到隐藏代码的效果

Set abc = Nothing

End Sub

提供的示例中,将VBA方法与DLL调用放在了一起,便于大家进行比较。另外,DLL文件的制作远比我在这里介绍的复杂,还会涉及到类初始化、自定义属性与事件等内容,不过如果有时我们仅仅需要借助其来保护我们的VBA代码的话,掌握这部分也就足够了,呵呵。() 9M3RBCbU.rar (17.95 KB, 下载次数: 1685)


[此贴子已经被作者于2004-3-1 8:17:20编辑过]

TA的精华主题

TA的得分主题

发表于 2004-2-29 02:46 | 显示全部楼层
大家都已经睡了吧! 版主的最新大作出来了,我可以先睹为快了

TA的精华主题

TA的得分主题

发表于 2004-2-29 09:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-2-29 09:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
http://club.excelhome.net/viewthread.php?tid=36365 关于vb中类的开发可以参考这篇简介。

TA的精华主题

TA的得分主题

发表于 2004-2-29 09:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-2-29 12:03 | 显示全部楼层
好文,不过文档好象不能下载,请检查。

TA的精华主题

TA的得分主题

发表于 2004-2-29 12:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2004-2-29 12:28 | 显示全部楼层
VoWaJns0.rar (119.8 KB, 下载次数: 1832) 好文章,再顶! 复制了MSDN98中关于VB对象编程的内容,制作Dll实际上实在封装自己的对象,如果想在此方面深入的朋友,Msdn是最好的帮手,可能很多朋友没有,摘录一些章节供大家阅读。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-15 23:19 , Processed in 0.043575 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表