VBA代码封装过程
更新时间:2023-12-10 05:03:01 阅读量: 教育文库 文档下载
VBA代码封装过程
一、函数和子过程的封装过程 二、封装后函数和子过程的调用 三、窗体的封装和调用 四、com加载项的制作
五、利用com加载项制作功能区
如果你写VBA代码只是给自己使用或者不介意和别人共享代码,那么就用不到封装。
我们一般用VB6.0作为VBA代码的封装工具,VBA代码的封装在我理解就是将VBA代码修改成VB6.0能运行的代码,然后利用VB6.0可以制作dll文件的特点将所有代码封装在dll文件中,最后我们可以通过安装加载项或者引用的方式在工作表界面或VBA界面调用其中的函数、子过程和窗体。下面让我们具体看下VBA代码的封装过程(封装调用环境:xp系统,excel2007,VB6.0):
一、函数和子过程的封装过程
函数和子过程也就是function过程和sub过程。封装的过程如下: 1、在vba编写代码,此次实验的代码如下,包含一个函数过程和一个子过程:
Function ceshi(a, b) ceshi = a + b End Function Sub ceshi1()
MsgBox Application.Name End Sub
2、打开VB6.0,新建工程,选择ActiveX dll,然后点打开。
3、点打开后在该工程中可以看到工程自带一个类模块,可以修改工程名字和类模块名字,也可以选择默认的工程名和类模块名,修改工程名和类模块名的过程如下,在VB6.0界面右边工程资源管理器窗口(如果没看见该窗口,可点击菜单栏中“视图”菜单的工程资源管理器命令调用)选择工程名(类模块名),然后在下面属性窗口“名称”一行修改成自己想要的名称,这里我们将工程名修改成fengzhuang,类模块名修改成cls1
4、右键点击类模块,在弹出的快捷菜单中选择查看代码,然后
将VBA代码复制到类模块代码窗口中,部分代码要稍作修改,改成VB6.0能识别的代码。如上面的子过程中出现了application对象,代表excel应用程序,但是在vb6.0直接这样写会出现错误,VB6.0并不能识别这就是一个excel应用程序对象,就像我们在VBA中直接写Dictionary(字典对象)和regexp(正则对象)一样,VBA并不能识别,要VBA能识别这两个对象,要么是创建新的对象(前期绑定和后期绑定),要么是获取已有的对象(前期绑定和后期绑定),因为我们在VBA中运行代码时,excel应用程序已经存在了,所以我们只需要获取已有对象即可。下面介绍前期绑定和后期绑定修改我们的代码。
A、前期绑定。在VB6.0最上面工程菜单中点击引用,在弹出的引用对话框中选择microsoft excel 12.0 object library,中间的数字因为安装版本的不同会有变化,2003是11.0、2010是14.0,尽量选择最高版本的,子过程代码无需修改。
B、后期绑定。后期绑定比较方便,不需要在VB6.0中设置引用,只需要修改子过程的代码即可。修改如下,中间用了getobject函数用于获取excel应用程序对象:
Sub ceshi1()
Set a = GetObject(, \MsgBox a.Name Set a = Nothing End Sub
在这里个人推荐使用后期绑定的方法修改代码,其实还有一种方法也可以使代码正常运行,无须设置引用,也无须用getobject获取对象,只需要为子过程设置一个object参数,然后在VBA中调用的时候向子过程传递应用程序这个参数即可。在VB6.0的代码如下:
Sub ceshi1(obj1 as object) MsgBox obj1.Name 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改成object即可,function ab(rng as object),在后期调用函数的时候直接传递单元格对象。
至此,函数和子过程的代码封装就讲完了。
二、封装后函数和子过程的调用
封装后的函数和子过程如何调用呢,具体过程如下(以前面的函数和子过程为例):
1、在工作表中调用函数
在工作表中可以调用部分简单的函数,部分需要传递对象的函数无法调用,如需要传递应用程序对象、控件对象等函数无法调用。调用过程如下:
A、添加加载项。依次点击excel2007按钮——excel选项——加载项,在加载项界面最下方选择excel加载项,然后点击转到,出现加载宏对话框,点击自动化按钮,在自动化服务器对话框中找到我们要加载的对象,一般是工程名.类模块名的形式(fengzhuang.cls1),然后点击确定返回加载宏对话框,点击确定。
B、添加完加载项后就可以直接在工作表调用函数了,就像调用工作表内部函数一样。
2、在VBA中调用函数和子过程。在VB6.0封装的函数和子过程一般都可以在VBA中调用,具体过程如下:
因为我们在vb6.0是用类模块封装的代码,如果要调用类模块中的函数和子过程,就先要创建一个类的实例,就像我们在VBA中创
建一个类以后在调用其中的过程一样。创建类的实例有前期绑定和后期绑定两种方法:
前期绑定
A.先在VBA中设置引用。点击VBA中工具菜单中引用命令,弹出引用对话框,点击浏览按钮,找到封装文件(fengzhuang.dll),点击打开返回引用对话框,这时引用对话框中已经选中我们要引用的工程(fengzhuang),点击确定完成引用。
B、创建类的实例,在代码中调用过程。在VBA中先用Dim a As New fengzhuang.cls1创建类实例,然后调用过程,测试效果如下:
后期绑定
创建类的实例使用后期绑定的方法无须设置引用,只要用createobject函数即可。代码和测试效果如下:
正在阅读:
VBA代码封装过程12-10
森林法律法规案例分析题111-17
CTC车务终端使用手册-行车日志03-11
综采工作面管理专题会议纪要01-13
放射性物品运输安全管理条例12-17
民办应用型本科建筑电气与智能化专业实验室的探索与研究03-03
大荔市同洲湖现代广场项目可行性研究报告05-14
文化创意产业创新基地商业计划书word05-01
徒步的乐趣作文600字06-27
事业单位法人公示信息自查报告03-23
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 封装
- 过程
- 代码
- VBA
- 2019年中考数学专题复习小练习专题2整式因式分解201810301131
- 广东省韶关市乐昌市2016-2017学年七年级(下)期末地理试卷(解析版)
- 2014年化工原理(上)复习题-1
- 法院院长工作及廉洁自律情况汇报
- 政治学概论
- 江苏省灌云县一中2016届高三第二次学情检测英语试卷
- 种植基础第二章复习题(1)
- 施工总承包管理措施
- 军事理论试题题库
- 最新最全小学语文基础知识大全
- Smaart V7入门:基本设置和测量 - 图文
- 学校体育学答案
- 人教版五年级下册数学导学案第三单元9课时容积和容积单位(1)
- 考试98分新兴时代下的公共政策
- 2018年深圳二模语文试卷简析(尹芳)
- 关于公路路基施工技术要点与控制
- 生态系统的能量流动练习题
- 2014年高职考试电子电工专业试卷 - 图文
- 工程硕士现代信号处理复习(word版)
- 最新-工商局关于规模以上企业发展情况调研报告 精品