Ecel VBA编程 使用动态链接库_第1页
Ecel VBA编程 使用动态链接库_第2页
Ecel VBA编程 使用动态链接库_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ExcelVBA编程使用动态链接库通过上面介绍的方法保护工程,非授权用户不能查看工程的源码。但是,仅仅设置密码保护是不够的,通过Internet可以搜索到多种方法对其进行破解。对源码安全性较高的保护方式是把VBA核心代码封装到动态链接库(DLL)文件中,然后用VBA代码访问动态链接库提供的过程或函数来完成工作。动态链接库很难被反编译,非常安全。DLL是DynamicLinkLibrary的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的或执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。在VBE中,调用DLL文件时其运行速度是非常快的。用户可以通过MicrosoftBasic6.0将VBA代码封装到动态链接库(DLL)文件中。1将VBA代码封装成动态链接库打开MicrosoftBasic6.0,在【新建工程】中选取'ActiveXDLL”,新建一个工程。在【属性】窗口中将工程名改为VBAPrj,类模块名改为VBACIs。然后执行【工程】丨【引用】命令,在对话框中选取【MicrosoftOffice11.0ObjectLibrary],然后保存工程。将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(rangeAsObject)。修改VBA所特有一般变量。VB也无法识别VBA特有的一般变量,如ProtectType,同样,我们也将其作为过程后函数的参数进行传递,不过其类型名都一律设为Variant。修改VBA所特有常量。如果在VBA代码中出现了这样的语句:ProtectionType=msoLineSolid很明显,msoLineSolid是Excel所独有的常量,不为VB所能识别,因而无法通过编译。当然,可以用修改变量的方法予以修改。在Excel中使用如下语句来获取该常量的值:MsgBoxCStr(msoLineSolid)其中CStr是类型转换函数,返回参数相应的字符串。只要在Excel中触发此事件,会弹出一个对话窗,显示'1”。于是,就可以将语句改为ProtectionType=1。3.封装用户窗体同样,也可以将用户窗体封装到动态链接库文件里。首先,打开VBA编辑器,右击工程资源管理器中的用户窗体,执行【导出文件】命令,并将窗体文件保存到指定的路径下。然后,切换到VB编辑器中,执行【工程】丨【添加文件】命令,添加导出的窗体文件。这时,导入的文件将出现在VB编辑器的工程资源管理器中。在工程资源管理器中,右键用户窗体并执行【查看代码】,将打开【代码】编辑窗口。同时,也显示了导入的用户窗体的代码。修改代码以保证通过编译。这样Excel就可以通过类模块VBACls间接地调用窗体。在VBE窗口中,导出用户窗体时,同时也导出了窗体中的代码。4.引用动态链接库代码或用户窗体在VB编辑器中编译后,会产生一个Dll的文件。在ExceI中,就可以通过这个文件来调用其中的代码或用户窗体中。调用方法有如下几种:例如,经过编译已生成了一个动态链接库文件VBAPrj.dll,其中有一个类模块VBACIs,此类模块有一个方法Test(rangeAsObject)在ExceI中调用该文件。通过变量引用在VBE窗口中,打开工程的ThisWorkBook代码窗口,并执行【工具】丨【引用】命令,引用动态链接库。调用代码如下:DimVBAClsAsNewVBAPrj.VBAClsVBACIs.Test(Range)通过事件引用如果知道该动态链接库文件的位置,可以在ThisWorkBook代码窗口以代码形式引用,代码如下:PrivateSubWorkbook_Open()OnErrorResumeNextMe.VBProject.References.AddFromFile"D:\VBAPrj.dll"EndSub通过引用函数引用将动态链接库文件拷贝到Excel文档同一目录下,可在ThisWorkBook代码窗口中建立如下引用函数:PrivateFunctionGetProjectExcel()AsObjectOnErrorResumeNextDimVBAClsAsObjectSetVBACls=CreateObject("VBAPrj.VBACls")IfVBAClsIsNothingThenExitFunctionEndIfSetGetProjectExcel=VBAClsEndFunction然后以以下代码形式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论