当前位置:文档之家› Excel VBA编程 使用动态链接库

Excel VBA编程 使用动态链接库

Excel VBA编程  使用动态链接库
Excel VBA编程  使用动态链接库

Excel VBA编程使用动态链接库

通过上面介绍的方法保护工程,非授权用户不能查看工程的源码。但是,仅仅设置密码保护是不够的,通过Internet可以搜索到多种方法对其进行破解。对源码安全性较高的保护方式是把VBA核心代码封装到动态链接库(DLL)文件中,然后用VBA代码访问动态链接库提供的过程或函数来完成工作。动态链接库很难被反编译,非常安全。

DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的或执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。

在VBE中,调用DLL文件时其运行速度是非常快的。用户可以通过Microsoft Basic 6.0将VBA 代码封装到动态链接库(DLL)文件中。

1.将VBA代码封装成动态链接库

打开Microsoft Basic 6.0,在【新建工程】中选取“ActiveX DLL”,新建一个工程。在【属性】窗口中将工程名改为VBAPrj,类模块名改为VBACls。然后执行【工程】|【引用】命令,在对话框中选取【Microsoft Office 11.0 Object Library】,然后保存工程。

将VBA工程中,将要封装的过程(如Test)的代码复制到VB的工程管理器中类模块VBACls 的【代码】编辑窗口中。这个过程成为类模块VBACls的一个方法,然后将工程编译生成DLL 文件。

提示可以将多个过程复制到VB的类模块中,从而使用DLL文件中包含多个方法。在Excel中,通过类模块VBACls建立的对象来调用这些方法。

2.修改代码

虽然VBA源于VB,但是两者毕竟存在着一些差异。因此,需要对转移到VB中的VBA代码做一些必要的修改。

●修改VBA代码中所特有类型的对象。

如果所添加的代码里有VBA所特有类型——如WorkBook、WorkSheet、Rang等所建立的对象,编译时会提示错误,因为VB不能够识别这些对象。此时,可以将这些对象作为过程或函数的参数进行传递。需要注意的是,这些参数的类型都一律设为Object。

例如,过程Test中要访问对象Range,但是VB无法识别Range。于是,就为过程Test添加一个参数range来传递Range,即Test可定义为Test(range As Object)。

●修改VBA所特有一般变量。

VB也无法识别VBA特有的一般变量,如ProtectType,同样,我们也将其作为过程后函数的参数进行传递,不过其类型名都一律设为Variant。

●修改VBA所特有常量。

如果在VBA代码中出现了这样的语句:

ProtectionType = msoLineSolid

很明显,msoLineSolid是Excel所独有的常量,不为VB所能识别,因而无法通过编译。当然,可以用修改变量的方法予以修改。在Excel中使用如下语句来获取该常量的值:

MsgBox CStr (msoLineSolid)

其中CStr是类型转换函数,返回参数相应的字符串。只要在Excel中触发此事件,会弹出一个对话窗,显示“1”。于是,就可以将语句改为ProtectionType = 1。

相关主题
文本预览
相关文档 最新文档