ⅤBα代码封装过程.doc

上传人:自*** 文档编号:126242725 上传时间:2020-03-23 格式:DOC 页数:32 大小:1.02MB
返回 下载 相关 举报
ⅤBα代码封装过程.doc_第1页
第1页 / 共32页
ⅤBα代码封装过程.doc_第2页
第2页 / 共32页
ⅤBα代码封装过程.doc_第3页
第3页 / 共32页
ⅤBα代码封装过程.doc_第4页
第4页 / 共32页
ⅤBα代码封装过程.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《ⅤBα代码封装过程.doc》由会员分享,可在线阅读,更多相关《ⅤBα代码封装过程.doc(32页珍藏版)》请在金锄头文库上搜索。

1、VBA代码封装过程一、函数和子过程的封装过程二、封装后函数和子过程的调用三、窗体的封装和调用四、com加载项的制作五、利用com加载项制作功能区如果你写VBA代码只是给自己使用或者不介意和别人共享代码,那么就用不到封装。我们一般用VB6.0作为VBA代码的封装工具,VBA代码的封装在我理解就是将VBA代码修改成VB6.0能运行的代码,然后利用VB6.0可以制作dll文件的特点将所有代码封装在dll文件中,最后我们可以通过安装加载项或者引用的方式在工作表界面或VBA界面调用其中的函数、子过程和窗体。下面让我们具体看下VBA代码的封装过程(封装调用环境:xp系统,excel2007,VB6.0):

2、一、函数和子过程的封装过程函数和子过程也就是function过程和sub过程。封装的过程如下:1、在vba编写代码,此次实验的代码如下,包含一个函数过程和一个子过程:Function ceshi(a, b)ceshi = a + bEnd FunctionSub ceshi1()MsgBox Application.NameEnd Sub2、打开VB6.0,新建工程,选择ActiveX dll,然后点打开。3、点打开后在该工程中可以看到工程自带一个类模块,可以修改工程名字和类模块名字,也可以选择默认的工程名和类模块名,修改工程名和类模块名的过程如下,在VB6.0界面右边工程资源管理器窗口(如果

3、没看见该窗口,可点击菜单栏中“视图”菜单的工程资源管理器命令调用)选择工程名(类模块名),然后在下面属性窗口“名称”一行修改成自己想要的名称,这里我们将工程名修改成fengzhuang,类模块名修改成cls14、右键点击类模块,在弹出的快捷菜单中选择查看代码,然后将VBA代码复制到类模块代码窗口中,部分代码要稍作修改,改成VB6.0能识别的代码。如上面的子过程中出现了application对象,代表excel应用程序,但是在vb6.0直接这样写会出现错误,VB6.0并不能识别这就是一个excel应用程序对象,就像我们在VBA中直接写Dictionary(字典对象)和regexp(正则对象)一样

4、,VBA并不能识别,要VBA能识别这两个对象,要么是创建新的对象(前期绑定和后期绑定),要么是获取已有的对象(前期绑定和后期绑定),因为我们在VBA中运行代码时,excel应用程序已经存在了,所以我们只需要获取已有对象即可。下面介绍前期绑定和后期绑定修改我们的代码。A、前期绑定。在VB6.0最上面工程菜单中点击引用,在弹出的引用对话框中选择microsoft excel 12.0 object library,中间的数字因为安装版本的不同会有变化,2003是11.0、2010是14.0,尽量选择最高版本的,子过程代码无需修改。B、后期绑定。后期绑定比较方便,不需要在VB6.0中设置引用,只需要

5、修改子过程的代码即可。修改如下,中间用了getobject函数用于获取excel应用程序对象:Sub ceshi1()Set a = GetObject(, excel.application)MsgBox a.NameSet a = NothingEnd Sub在这里个人推荐使用后期绑定的方法修改代码,其实还有一种方法也可以使代码正常运行,无须设置引用,也无须用getobject获取对象,只需要为子过程设置一个object参数,然后在VBA中调用的时候向子过程传递应用程序这个参数即可。在VB6.0的代码如下:Sub ceshi1(obj1 as object)MsgBox obj1.Name

6、End Sub在vba中调用ceshi1子过程时向ceshi1传递参数application,写成ceshi1(application)。5、生成dll文件。点击vb6.0 文件菜单中生成dll命令生成dll文件最后还要提到的一点是,因为上面测试用的代码比较简单,没有讲到向函数传递对象时代码的封装过程,这里简单介绍下,比如在VBA中函数 function ab(rng as range)在VB6.0中应该怎样写呢,第一种是先设置引用microsoft excel 12.0 object library,然后将VBA函数代码直接复制到VB6.0即可。第二种不需要设置引用,直接修改函数将range

7、改成object即可,function ab(rng as object),在后期调用函数的时候直接传递单元格对象。至此,函数和子过程的代码封装就讲完了。二、封装后函数和子过程的调用封装后的函数和子过程如何调用呢,具体过程如下(以前面的函数和子过程为例):1、在工作表中调用函数在工作表中可以调用部分简单的函数,部分需要传递对象的函数无法调用,如需要传递应用程序对象、控件对象等函数无法调用。调用过程如下:A、添加加载项。依次点击excel2007按钮excel选项加载项,在加载项界面最下方选择excel加载项,然后点击转到,出现加载宏对话框,点击自动化按钮,在自动化服务器对话框中找到我们要加载的

8、对象,一般是工程名.类模块名的形式(fengzhuang.cls1),然后点击确定返回加载宏对话框,点击确定。B、添加完加载项后就可以直接在工作表调用函数了,就像调用工作表内部函数一样。2、在VBA中调用函数和子过程。在VB6.0封装的函数和子过程一般都可以在VBA中调用,具体过程如下:因为我们在vb6.0是用类模块封装的代码,如果要调用类模块中的函数和子过程,就先要创建一个类的实例,就像我们在VBA中创建一个类以后在调用其中的过程一样。创建类的实例有前期绑定和后期绑定两种方法:前期绑定A先在VBA中设置引用。点击VBA中工具菜单中引用命令,弹出引用对话框,点击浏览按钮,找到封装文件(feng

9、zhuang.dll),点击打开返回引用对话框,这时引用对话框中已经选中我们要引用的工程(fengzhuang),点击确定完成引用。B、创建类的实例,在代码中调用过程。在VBA中先用Dim a As New fengzhuang.cls1创建类实例,然后调用过程,测试效果如下:后期绑定创建类的实例使用后期绑定的方法无须设置引用,只要用createobject函数即可。代码和测试效果如下:至此,函数和子过程的封装过程就讲完了,上面封装的过程其实就是在vb6.0中创建一个类的过程,然后在VBA中通过创建类的实例在调用实例的方法。三、窗体的封装和调用过程窗体的封装大概过程是先在excel VBA中将

10、窗体文件导出,然后在VB6.0中导入窗体文件,修改窗体的某些代码,在类模块中添加调用窗体的过程,最后封装成dll文件。窗体的调用与前面子过程的调用相似。1、窗体的封装A、在excelVBA中设计好窗体和代码。如下图所示,测试用窗体包含一个按钮,窗体代码包含一个事件过程。B、将窗体导出。在VBA工程资源管理器中选择窗体点击右键,在弹出的快捷菜单中选择导出文件,在导出文件对话框中选择导出文件的保存位置。这里将文件保存至桌面并选用默认的文件名(userform1)。C、在VB6.0中导入窗体文件。在vb6.0中新建工程(比较懒,没有重新新建工程,用的是前面封装函数和子过程的工程),点击工程菜单栏添加

11、窗体命令,在弹出的添加窗体对话框中选“现存”,找到先前导出的窗体文件,然后点打开完成窗体的导入过程,这时我们可以看到工程中多了窗体文件。D、修改窗体代码。右键点击工程资源管理器中窗体文件,选择查看代码,在窗体代码窗口中修改代码。这里修改代码的过程与前面修改子过程的代码相似,该窗体事件的代码修改如下:Private Sub CommandButton1_Click()Set a = GetObject(, excel.application)MsgBox a.NameEnd SubE、在类模块中添加调用窗体的代码。在类模块代码窗口添加如下代码,这个是方便我们以后在VBA中调用窗体用的。Sub a

12、d()UserForm1.Show 0End SubF、生成dll文件,完成封装,这一步与前面封装函数和子过程的步骤一样。2、窗体的调用窗体的调用与前面调用函数和子过程的方法有点不同,通过调用类模块中的过程(ad)间接调用窗体。代码及效果如下:窗体的封装与调用与函数和子过程的基本类似,只是窗体在封装时要先导入窗体文件到VB6.0中,调用的时候只能通过类模块中的方法间接调用窗体。四、com加载项的制作在这里学习com加载项的制作是为了后面封装自定义命令栏和功能区的代码。1、在excel中加载com加载项。依次点击office按钮excel选项加载项,在加载项界面的最下方选择com加载项,然后点击

13、转到按钮,在com加载项界面勾选需要加载的com加载项即可,如果需要加载的com加载项不在com加载项的列表框中,可点击旁边的添加按钮添加包含com加载项的文件,然后在进行加载。2、com加载项的制作。Com加载项的制作这里还是要用到VB6.0,大概过程是在新建的工程中添加一个设计器类,修改设计器类的加载行为,书写代码后封装成dll文件或者exe文件都可以。制作com加载项的具体过程如下:(1)新建工程,添加设计器类。打开VB6.0,在新建工程窗口选择activeX.EXE、Active.DLL或者外接程序中的一个,有些地方讲的是要选择外接程序,其实选择另外两个也可以,只是外接程序会自带一个设

14、计器类。这里选择的是active.dll,选择好新建工程的类型以后点打开,在工程资源管理器界面我们看到该工程只带有一个类模块,这时我们需要添加一个设计器类,点击VB6.0工程菜单中“添加Addin Class”命令为工程添加一个设计器类。如果没有“添加Addin Class”这个命令,可点击VB6.0工程菜单部件命令,在弹出的部件对话框中选择设计器,然后勾选Addin Class点确定。(2)、修改设计器类的名称,选择设计器类的加载行为。在工程资源管理器窗口双击设计器类,在弹出的对话框中选择“通用”选项卡,在通用选项卡中填写相应信息。A外接程序显示名称,这里填写的名称就是加载com加载项时显示

15、的名称,这里填写com加载。B外接程序描述,可不写C应用程序,这里选择com加载项需要应用的程序,一定要填写,不然当我们选择添加com加载项时看不到相应的com加载项,这里选择excel。D应用程序版本,选择你机子上安装的excel版本。这里是excel12.0E初始化加载行为,这里有4个选项,用来选择com加载项的加载行为:Startup:每次当excel应用程序启动时,自动加载com加载项。这里选择startupLoad on demand:excel启动时不会加载com加载项,但是在每次启动时会自动选中,如果通用选项卡选择了这个,那么在excel加载com加载项时需要将勾选去掉退出后在进入com加载项界面选择该加载项才能加载。Load at next startup only:当下次excel启动时自动加载com加载项,但是之后excel在启动时,该com加载项的加载行为就变了Load on demandNone:excel启动时不会加载com加载项,也不会勾选,需要手动勾选加载。注册表会记录下com加载项的加载行为,以本文为例,那么可在HKEY_CURRENT_USERSoftwareMicrosoftOfficeExcelAddins工程1.AddInDesign

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号