博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DLL文件制作与在VBA调用初级进阶
阅读量:4177 次
发布时间:2019-05-26

本文共 1961 字,大约阅读时间需要 6 分钟。

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开发者在保护其代码时也多采用此法来维护其合法权益。
现在开始。假如我们要编这么一段代码:将工作表Sheet1A1单元格的数值与B1单元格的数值相加填写到C1单元格去(嘿嘿,这是极简单的了,只是用来说明问题),在VBA模块我们可以编写这样的代码:

  1. Sub test() 
  2.   On Error Resume Next 
  3.   Dim i, j As Integer 
  4.   With Worksheets("Sheet1"
  5.      i = .Cells(1, 1).Value 
  6.      j = .Cells(1, 2).Value 
  7.      .Cells(1, 3) = i + j 
  8.   End With 
  9. End Sub 

执行上面的宏,会发现C1单元格自动会出现A1+B1的结果了。

下面我们在
VB中生成包含以上宏功能的函数(子程序)的DLL文件。打开VB,“文件”-“新建工程”-ActiveX DLL”,此时会弹出class1模块代码窗口,将如下代码写入:

  1. Sub test() 
  2.   On Error Resume Next 
  3.   Dim i, j As Integer 
  4.   Dim EB 
  5.   Set EB = GetObject(, "Excel.Application"
  6.   With EB.ActiveSheet 
  7.      i = .Cells(1, 1).Value 
  8.      j = .Cells(1, 2).Value 
  9.      .Cells(1, 3) = i + j 
  10.   End With 
  11.   Set EB = Nothing 
  12. End Sub 

在生成DLL之前,注意确保VB"工程"---"引用""Microsoft Excel 9.0 Object Library"前面的勾已打上,再就是正确设定好DLL描述与名称。菜单“工程”----“工程属性”---“工程描述”,里面可以写上你的DLL功能名称或简介或版本号。“视图”---“属性”,设定名称为你在其他开发环境中欲使用的引用名称,如“Mytest”。好,现在点击菜单“文件”---“生成…dll”,会弹出路径与文件取名窗,按你的意思选择与输入好路径和即将生成的DLL文件名,按确定就会完成DLL的生成工作。

此时DLL已生成在你指定的目录下了,当前工程保不保存就随便你自己了,如果以后还想再编辑修改的话,当然得取个文件名保存好:)。生成的DLL如果正确的话,VBA中只要引用后就可正常调用了
现在回到EXCEL VBA开发环境中来,先对刚生成的DLL进行一下引用。关于引用,可以手工引用,也可以用代码来做。手工引用的步骤是:在VBE窗口中,菜单“工具”---“引用”,会弹出如下窗口:
浏览”到刚才生成的DLL,选择打勾确定即可。代码引用:  Shell "regsvr32 /s " & "…………..dll", vbHide,加s参数是防止出现确认窗口,影响界面。取消引用则使用/u参数。
然后在VBA中写调用的代码:

  1. Sub DLLtest()
  2.   Dim abc As New Mytest ‘定义abc为新类,即在DLL文件中定义的
  3.   abc.test ‘调用DLL中提供的过程,来完成原来在VBA中的功能,起到隐藏代码的效果
  4.   Set abc = Nothing
  5. End Sub

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

你可能感兴趣的文章
Linux查看硬件信息命令
查看>>
.obj 和 .mtl文件格式
查看>>
CentOS6.5 添加开机自启动脚本
查看>>
Access 和vc6.0 相连,在我indows64 位系统中,出现找不到Microsoft Access Driver(*.mdb) ODBC驱动程序的安装例程。请重新安装驱动
查看>>
Spring框架的基本概念
查看>>
Spring Bean的配置方式及标注(Annotation)配置
查看>>
Spring框架事务管理之一:JavaEE事务与Spring事务
查看>>
java.lang.IllegalArgumentException: FacesContext must not be null 错误分析及解决
查看>>
Spring框架事务管理之四:Spring编程式事务
查看>>
JOSSO入门指南及其与WildFly AS 10的集成
查看>>
为WildFly AS 10中的Liferay Portal 6.2配置JOSSO Agent
查看>>
Spring ORM与Hibernate的集成开发详解
查看>>
WildFly AS 10中基于PicketLink的SAML SSO实现
查看>>
Spring AOP概述
查看>>
Apache Maven入门指南
查看>>
Apache Maven的插件概述
查看>>
Apache Maven项目提供的Archetype插件详解
查看>>
Apache Maven项目提供的Compiler插件详解
查看>>
Apache Maven项目提供的Ant插件详解
查看>>
Apache Maven项目提供的AntRun插件详解
查看>>