Excel程序VBA开发自学通.docx
- 文档编号:10370196
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:17
- 大小:26.08KB
Excel程序VBA开发自学通.docx
《Excel程序VBA开发自学通.docx》由会员分享,可在线阅读,更多相关《Excel程序VBA开发自学通.docx(17页珍藏版)》请在冰豆网上搜索。
Excel程序VBA开发自学通
Excel程序VBA开发自学通
ExcelVBA程序开发自学XXXX年龄,性别等。
除了需要逐个手工输入的身份证号码外,另外三项信息有四种输入方式:
手工输入、内置公式、自定义函数方式和插件方式。
手动输入法效率极低,出错概率最高。
本节通过后三种方法进行实施和比较,从而使读者对VBA的优点和用法有一个初步的了解。
1.1.1常规公式法
以图1.1中的数据为例,有许多方法可以使用公式从身份证中提取生日、年龄、性别和其他信息。
这个例子列出了其中一个。
图1.1根据身份证号码提取员工的年龄、生日和性别
雇员的年龄、出生日期和性别由公式计算。
步骤如下:
(1)在单元格C3中输入以下公式计算年龄:
=DATEDIF(日期(中间值(B3,7,4-(B3)=15)*2),中间值(B3,11-(B3)=15)*2,2),
ExcelVBA项目开发自学通过XXXX年##月##日\(3)在单元格E3中输入以下公式计算性别:
=IF(ISODD(MID(B3,15,3)),\男\女\
注:
在ExcelXXXX中,年龄、出生日期和性别:
=SFZ(B3),=SFZ(B3
=SFZ(B3)或=SFZ(B3
(3)选择C3:
E3单元格并向下填充公式。
结果如图1.3所示。
ExcelVBA程序开发自学XXXX年龄,生日和性别信息。
它不属于Excel内置函数,需要VBA编写代码才能使用。
读者可以从随书附上的光盘上获得完整的代码。
SFZ函数有两个参数,第一个参数是单元格引用,第二个参数是信息描述,用于指定需要获取身份证中的哪部分信息。
获取它为“NL”(不区分大小写)时的年龄;当它是“SR”时,获得生日,当它是“XB”或省略第二个参数时,获得性别。
备注:
与内置函数法/公式法相比,自定义函数法是利用VBA编写的外部函数完成的。
它的优点是公式简短易懂。
任何不熟悉函数和VBA的人都可以在一分钟内学会操作和理解公式的含义。
1.1.3插件方法
插件方法是指使用Excel插件来操作工作表。
该插件不属于当前工作簿,但可以实现与当前工作簿的交互功能,批量快速完成身份证信息提取工作。
操作步骤如下:
(1)在关闭Excel程序的前提下,复制插件(位置:
..\\第1章\\批量获取身份证信息。
xlam)从附在书上的光盘放入下面的自启动文件夹,安装完成:
C:
\\程序文件\\微软办公室\\办公室12\\XLSTART
注意:
如果您的OFFICE没有安装在C磁盘上,则需要根据实际情况修改上面的磁盘号。
如果你使用办公室XXXX的年龄、生日和性别等信息。
ExcelVBA项目开发自学考试2015-6-15第5/510页
图1.4通过插件方法批量获取身份证信息
备注:
插入式方法在从身份证号码获取信息方面具有速度快、通用性好的优点。
与内置函数法相比,它操作更简单,不需要任何函数知识,不需要输入很长的公式,只需要点击几下鼠标。
与自定义函数相比,它具有通用性好的优点,可用于任何工作表或工作簿。
但是,前一种方法的自定义函数不作为插件存在,只能在当前工作簿中使用。
1.1.4VBA优势讨论
在前三种情况下,我们可以看到,Excel具有强大的计算功能,但对于一些大型数据操作,传统的方法相当复杂。
用户需要学习复杂的函数知识,并建立长公式来解决一些操作。
VBA可以简化和理解公式,甚至根本不需要公式。
一些专业计算不需要输入字母就能完成。
具体来说,VBA或VBA开发的插件比Excel自身的功能有以下优势:
?
对操作对象进行批量数据处理
在前一节中,插件方法完成了身份证信息的说明。
它可以在一瞬间完成多个单元格数据的计算,甚至存储在多个工作表中的身份证号码也可以在一瞬间完成信息提取。
与传统的逐一处理方法相比,效率大大提高。
?
多任务一键完成
多任务是指需要对同一对象进行多个操作。
例如,在前一节中,从身份证号码中获得了三种类型的信息。
VBA可以点击一个按钮,立即完成任务,而不会感觉到它一个接一个地分三步完成了任务。
这是高效办公空间的最佳体现。
?
简化复杂的任务
Excel是许多小工具的综合体。
这些工具可以嵌套,以完成更强大的数据处理。
然而,当嵌套太多时,用户需要一个很深的基础来操作或理解。
另一方面,一些特殊行业的工作和任务只能通过非常复杂的操作来完成,对于一些只需要申请而不需要深入研究和理解的普通办公室职员来说,这是一种技能测试。
然而,通过VBA的二次开发可以简化复杂的任务。
简单是指理解和操作的同时简化。
就像第1.1.3节中的右键菜单提取身份证号码的三种类型的信息一样,用户不需要输入长的公式并理解如何提取信息。
单击菜单完成。
另一个例子是在企业中生成的工资单,其中10000人需要通过手动操作处理10000*N次,而可以使用Excel插件
ExcelVBA项目开发自学考试2015-6-15第41/510页
2.显示工具提示
此选项代表工具栏中的所有按钮。
如果选中该选项,当鼠标指向该按钮时,会显示其功能和快捷键提示,这对学习VBA很有帮助。
3.错误捕获
错误捕获包括三个选项:
“错误发生时的中间部分”、“类模块中的中断”和“遇到未处理错误时的中断”。
每个选项的含义如表3-1所示。
表3-1错误捕获的含义
类型错误在类模块中断中中断中断的意思是当句柄错误丢失时。
任何错误都会导致项目切换到中断模式,不管错误句柄是否是活动的或者代码是否在类模块中。
任何在对象类模块中丢失句柄的错误都会使项目进入中断模式。
任何其他丢失句柄的错误都会使项目进入中断模式。
第一个项目和第三个项目可以展示不同之处。
(1)清除当前表A1:
B1,并在模块中输入以下代码:
子错误捕获()
在错误恢复下一个Dimi为字节I=[a1/[B1]
如果错了。
数字0然后转到错误:
MsgBoxi退出子错误:
MsgBox\错误\结束子节点
(2)将错误捕获设置为第一项;
(3)将光标置于代码中的任意位置,按快捷键[F5]执行代码,程序会立即弹出运行时错误对话框;
(4)单击对话框中的“调试”按钮,“i=[a1]/[b1”语句显示为黄色,表示该语句出错;
(5)将错误捕获设置为第三项,然后执行代码。
程序将不再弹出错误提示。
调试代码或学习时,应该将选项设置为第一项。
当代码被编写并正式执行时,它需要被设置为第3项。
3.2.4VBA代码保护
VBA代码需要保护有两个目的:
保护结果和防止意外损坏。
保护VBA代码有两种方法:
共享工作簿和加密代码。
1.共享方法
共享方法是指共享工作簿,以实现不可见代码的目的。
听起来很矛盾。
压
ExcelVBA项目开发自学考试2015-6-15第42/510页
但是,可以肯定的是,这些要求可以通过逐步操作来满足。
(1)在VBA模块中输入代码后,按快捷键[Ctrl+S]保存项目,必须为xls格式或xlsm、xlam或xla格式;
(2)返回工作表界面,进入查看功能区,点击共享工作簿按钮,勾选“允许多用户同时编辑”并保存。
(3)重新打开工作簿,进入VBE界面后双击当前工作簿项目,弹出3.41所示的提示:
图3.40共享工作簿图3.41保护后状态
2.加密
VBA选项对话框提供代码加密功能,步骤如下:
(1)点击VBE界面下的菜单[工具]\\[VBa对象属性]。
每个项目的默认名称是“VBA项目”,但该名称可以手动修改。
如已修改,以实际名称为准;
(2)在“项目属性”对话框中,切换到“保护”选项卡,选择“查看时锁定项目”,并在以下两个文本框中输入相同的密码两次;
(3)保护工作簿后重新启动文件,使用[Alt+F11]进入VBE界面,双击项目名称,弹出如图3.43所示的对话框。
如果没有输入正确的密码,将禁止查看。
图3.42项目代码设置图3.43打开受保护项目时的确认权限
ExcelVBA项目开发自学考试2015-6-15
限制
第43页共510页
上述两种方法也可以同时使用。
注意:
不管它是如何建立的,VBA的保护措施非常脆弱,没有专业的程序员就可能被破坏。
因此,如果您对自己的代码安全性有很高的要求,可以使用COM插件而不是ExcelVBA来编写它们。
这本书的第32章将描述用VB开发COM插件的具体方法。
ExcelVBA项目开发自学考试2015-6-15第44/510页
高级文本:
VBA语法,程序和事件
(第4-12章)
第四章VBA的基本概念
VBA语言是一种面向对象的编程语言。
VBA有许多物品。
每个对象都包含许多属于自己类别的属性和方法,并且有自己的事件。
本章将详细介绍VBA的基本知识。
本章要点:
?
理解VBA的对象、属性和方法?
理解VBA事件?
VBA的运营商
?
简单字符处理功能
4.1理解VBA的对象、属性和方法
几乎90%的VBA程序对对象进行操作,并使用对象方法来读取或写入对象属性...在编写代码之前,您必须全面了解Excel对象。
4.1.1什么是对象
最简单的故事必须有人物、事件或时间和地点。
人物是故事的核心,所以VBA有相应的对象、属性、方法和事件,其中对象是VBA的核心。
许多软件都有VBA环境,所以VBA在不同软件中的操作对象也不同。
例如,Word中的应用程序对象是WORD,Excel中的应用程序对象是Excel。
VBA的对象操作语句格式始终遵循以下格式:
“对象。
属性”,“对象”。
方法”或“父对象”。
子对象。
属性”...例如,在以下示例中:
工作表(\sheet\usheets\usheet\u是一个对象,名称是对象的属性工作簿
(2)。
关闭-工作簿
(2)是一个对象,关闭是对象的方法
范围(\-range(\)是父对象,注释是子对象,删除是方法
Excel有数百个对象。
表4-1显示了常见对象的名称和含义。
表4-1常见对象及其含义
对象名称应用程序
该含义代表整个Excel应用程序。
ExcelVBA项目开发自学考试2015-6-15
窗口工作表shaperange透视表工作簿第45页,共510页
代表性窗口代表由工作表指定的一组工作表,或者活动工作簿中的所有工作表代表一个形状区域。
它是文档中的一组形状,表示工作表上的数据透视表,该工作簿表示绘图层中的对象,如自选图形、自由窗体、OLE对象或表示单元格、行、列、选定区域或三维区域的形状切片,该区域表示单元格区域的定义名称。
名称可以是内置名称(如打印区域),也可以是自定义名称。
图表代表工作簿中提供文件对话框的图表。
它的功能类似于标准的“打开”和“保存文件对话框”对话框。
CommandBarPopup表示命令栏上的弹出控件。
commandbar表示容器应用程序中的命令栏。
你如何理解属性
属性是对象的外部和内部特征,包括大小、颜色或边距、数量或行为的某些方面,例如对象是否可以被激活、可见、刷新等。
您可以通过修改对象的属性值来更改其属性。
例如,表就是一个对象。
桌面是方形的,有四条腿,是木制的,可以拆卸,等等。
拆卸的动作属于方法。
工作表的属性是什么?
您可以通过以下两种方式获得它。
1.自动成员列表
任何对象都有属性,当输入代码时,可以从自动成员列表中看到它的属性。
例如,在图4.1中,输入“工作表”后,将显示一个下拉列表,其中包含工作表的属性和方法,其中一个带有手形图标的是属性,另一个是方法。
然而,很多很多对象仍然有一些隐藏的属性没有在这个列表中列出。
您可以按如下方式调用其隐藏属性。
(1)按快捷键[F2]打开对象浏览器;
(2)在空的折叠区域点击右键,从菜单中选择[显示隐含成员],如图4.2所示。
(3)返回模块代码窗口并输入“工作表”。
新的下拉列表将显示灰色隐藏属性。
ExcelVBA项目开发自学考试2015-6-15第31/510页
5.代码窗口
代码窗口是存储VBA代码的地方。
它是VBE中最核心的组件。
代码窗口包括工作表代码窗口、工作簿代码窗口、表单代码窗口、模块代码窗口和类模块代码窗口。
6.对象和流程窗口
对象和过程窗口是指位于代码窗口上方的对象列表和窗口过程列。
参见图3.13。
图3.13对象和过程列表
图3.13左上角的下拉列表是一个对象列表。
单击下拉箭头列出所有可用的对象名称。
右侧的下拉列表是可用程序的列表。
单击下拉箭头列出所有可用的过程名称。
这两个列表对用于辅助代码输入,并提示当前对象支持的对事件。
用户也永远不能使用它和手工输入代码。
但是,当输入工作表事件或工作簿事件时,通过对象和流程下拉列表自动生成代码比手动输入更高效、更准确。
它们的用法将在下面关于事件的章节中详细解释。
7.即时窗口
“即时”窗口有两个功能:
显示调试代码时生成的结果(信息),以及用一句话执行代码。
即时窗口默认情况下是隐藏的,可以使用快捷键[Ctrl+G]调出。
现在我们将分别演示即时窗口的两个功能和操作步骤:
(1)打开任何工作簿后,按快捷键[Alt+F11进入VBE界面;
(2)单击菜单“插入和模块”。
(3)按快捷键[Ctrl+G]显示即时窗口;(4)在模块中输入以下代码:
子显示当前工作簿的全名()
如果len(此工作簿.路径)=0则打印\当前工作簿不保存\否则
调试。
打印此工作簿。
全名结束中频结束子
(5)将光标定位在代码中的任何位置,然后单击快捷键[F5]执行代码。
代码执行结果将显示在即时窗口中。
如果当前工作簿未保存,即时窗口将显示“当前工作簿未保存”,并且不显示工作簿的全名,包括其路径。
参见图3.14。
ExcelVBA项目开发自学考试2015-6-15第32/510页
(6)清除即时窗口中的字符,然后输入以下代码:
练习册。
添加(xlWBATChart)
然后单击回车键,注意当光标位于当前代码行的最右边时,它必须是一个回车键。
此时,您可以发现Excel已经创建了一个包含工作图表的新工作簿。
(7)在第二行输入以下代码,然后按回车键,将立即在当前工作簿中创建10个新工作表。
床单。
添加计数:
=10
执行代码后,工作簿中将有13个工作表,如图3.15所示。
图3.14在即时窗口中显示信息图3.15在即时窗口中执行单行程序
8.工具箱
工具箱是VBA项目开发的一个非常重要的工具。
默认状态工具箱包括15个工具,用户可以使用这些工具设置类似于任何其他软件程序的界面。
如果缺省工具不够,您也可以右键单击来定义新工具。
调用工具箱的方法不同于任何以前的组件。
它基于用户表单。
仅当用户选择了UserForm对象并且隐藏在所有其他状态中时出现。
显示工具箱的方法是单击菜单[插入]\\[用户表单],工具箱将自动显示。
工具箱的外观如图3.16所示。
如果已经有一个表单并且您不想创建表单,您可以双击表单名称(默认为UserForm1,并且根据实际情况,用户可能会更改为另一个名称),然后单击菜单[视图]\\[工具箱]。
工具箱可以定制,包括新页面、附件控件等。
步骤如下:
(1)右键单击表单右上角的空白区域,从菜单中选择[新页面]创建一个名为“新页面”的页面;
(2)右键单击单词“新页面”,从菜单中选择“重命名”,并输入名称“我的新工具”;
(3)新创建的页面是完全空白的,可以随意添加新组件。
右键单击当前页面中间的空白区域,并从菜单中选择[附件控制]以打开“附件控制”对话框。
(4)在对话框中勾选所需的组件并返回工具箱。
工具箱的定制效果如3.17所示:
ExcelVBA项目开发自学考试2015-6-15第33/510页
图3.16工具箱外观图3.17定制工具箱
3.1.3VBE中不同代码窗口的功能
在存储VBA代码的上一节中提到了VBE接口中的代码窗口,但是理解这一点还远远不够。
VBE中有五种类型的代码窗口,即使代码完全一致,它们在不同的窗口中也会有不同的效果。
1.工作表代码窗口
工作表代码窗口用于存储工作表事件代码,这些代码仅在当前表中调用。
虽然也可以执行存储在工作表事件代码中的普通Sub过程,也可以调用其他模块或工作表,但有许多不便之处。
因此,在正常情况下,每个人都达成了共识:
工作表事件代码存储在工作表代码窗口中,函数过程和子过程存储在模块中。
使用快捷键[Ctrl+R]打开工作表代码窗口,调用工程资源管理器,然后双击工作表名称,工作表事件代码窗口将立即出现在右侧。
每个工作表都有自己的代码窗口,其中存储了自己的事件相关代码,这些代码只能在当前表中调用。
例如,输入下面的代码,在“生产表”的代码窗口中报告选择地址,如图3.18所示。
私有子工作表_选择变更(按值目标为范围)MsgBox目标。
地址结束子
图3.18在“生产表”代码窗口中输入选择变更事件代码
使用快捷键[Alt+Q]返回到Excel工作表,并在“生产表”工作表中选择任何范围。
ExcelVBA项目开发自学考试2015-6-15第34/510页
立即弹出当前选区的地址信息,如图3.19所示。
如果选择了多个区域,也会提示多个区域的地址,用逗号分隔,如图3.20所示。
但是,在任何其他工作表选择区域都没有响应。
如果必须在其他工作表上调用当前工作表事件的代码,也可以使用以下步骤来完成:
(1)删除“生产表”中代码前的私有;
(2)在“表2”的代码窗口中输入以下代码:
私有子工作区工作表_选择变更(byvaltargetarange)调用表(\生产表\结束子
其中调用意味着调用其他过程。
按[Alt+F11]返回工作表并输入工作表2。
选择任何区域也会弹出选择地址信息。
图3.19选择地址提示图3.20多区域地址提示
注意:
工作表事件代码中的私有表示当前的子程序被声明为私有,也就是说,只能调用当前的工作表模块或工作表。
在本例中,为了调用表2,必须删除私有表。
有关隐私的更多信息,请参见本书的第5章。
2.工作簿代码窗口
工作簿代码窗口的名称是“工作簿”,用于存储工作簿级别的事件代码。
虽然它也可以存储函数程序和普通子程序,但根据习惯和使用方便,此窗口只存储与工作簿事件相关的代码。
例如,图3.21是工作簿级别的事件代码,这意味着工作簿在关闭时将被保存。
此代码仅在工作簿关闭时执行。
没有其他窗口可以调用此事件代码。
ExcelVBA项目开发自学考试2015-6-15第35/510页
图3.21工作簿代码和关闭事件
3.表单代码窗口
表单代码窗口用于存储与表单和控件相关的代码。
它的代码只能在表单中使用,不能执行其他窗口。
查看表单中代码的方法是在项目资源管理器中右键单击表单,然后从菜单中选择“查看代码”。
例如,图3.22中的代码位于UserForm1的代码窗口中,表示在开始表单时左边距设置为100。
除了用户表单1之外,不能以任何方式从任何窗口调用此代码。
图3.22表单代码窗口
4.模块代码
模块代码窗口在工作中使用最频繁。
子程序和功能程序存储在模块代码窗口中。
这些过程可以在当前模块中执行,也可以由任何其他窗口调用。
工作表事件、工作簿事件、表单事件和类模块都可以使用模块中的程序,模块也可以相互调用。
5.类模块
类模块是允许用户自定义类的属性和方法的模块。
点击菜单[插入]\\[类模块]创建一个类模块,图标是
。
类模块的代码通常用于应用程序级事件,并在对应于应用程序的事件中调用。
本书第15章将详细介绍课程模块的使用。
3.2VBE中的选项设置
VBE中的选项设置对VBA的爱好者来说非常重要。
如果这个选项设置不当,将会给编程带来无穷的麻烦。
例如,无法捕获错误,没有函数提示,控件无法对齐,等等。
打开VBA编辑器选项的方法是点击菜单[工具]\\[选项]。
选项对话框的外观如图3.23所示。
本节详细解释选项对话框中的所有组件,并建议如何优化设置。
ExcelVBA项目开发自学考试2015-6-15第36/510页
图3.23VBE选项
3.2.1编辑器选项
选项对话框中的第一个选项卡是编辑器。
该选项卡中每个项目的功能描述如下:
1.自动语法检测
自动语音速率检测是指在编写代码时自动检查每个代码的错误。
如果有错误,将弹出警告框,同时错误的语句将以红色显示,表示用户的代码是错误的。
例如,在下图中,在输入For语句时忘记了,导致代码生成错误。
当输入代码和回车时,程序会立即弹出一个编译错误提示,通知错误类型,错误语句将被标记为红色。
图3.24自动语法检测
建议选中该选项,以帮助您理解当前代码中的错误类型,从而快速纠正它们。
2.要求声明变量
该选项意味着用户在编写代码时被迫声明所有变量,否则程序无法执行。
这体现在任何新模块、工作表代码窗口和工作簿代码窗口中的“选项显式”语句的生成中。
强制声明变量有三个优点:
提高代码运行效率
?
防止因变量类型不正确而出错
?
当输入目标变量时,可以自动列出快速信息
ExcelVBA项目开发自学考试2015-6-15第37/510页
从图3.25可以看出,变量rng没有被声明,所以当代码运行时会产生一个编译错误,表明变量没有被定义。
图3.25提示变量未定义错误
建议选中此选项。
3.自动列出成员
该选项可以在输入代码时自动生成语法提示,包括对象的类型、属性和方法等。
例如,当输入“dimrngas”语句时,VBA将列出所有可用的变量类型供用户选择,而不是手动输入,从而防止不正确的变量类型,如图3.26和3.27所示:
图3.26自动列变量名图3.27自动列表对象的属性和方法
如果未选中此选项,则无法弹出提示,只能手动输入。
建议检查。
4.快速信息的自动显示
该选项表示输入代码时提示参数,方便用户检查输入的参数是否正确。
这种暗示主要体现在三个方面:
参数数量?
参数类型?
当前参数
从图3.28中的快速信息可以看出,MID函数有三个参数,第一个参数是String类型,第二个参数是Long类型,第三个参数是可选参数,表示长度...所有这些信息为编程提供了便利。
从图3.29中的快速信息可以看出,范围有两个参数,第二个参数是可选的。
第二个参数目前正在输入,因为它已加粗。
ExcelVBA项目开发自学考试2015-6-15第38/510页
图3.28提示MID输入参数信息图3.29提示当前参数
建议选中此选项。
5.自动显示数据提示
该选项指在中断模式下设置断点。
当代码被执行并且鼠标指针指向变量时,数据提示窗口将显示变量的值。
具体操作步骤如下:
(1)在模块中输入以下代码:
子测试()
调光温度为字节温度=100兆字节温度结束子
(2)在第四个句子代码前单击一次,将该句子设置为断点。
您也可以将光标定位在句子代码上,然后按F9键设置断点。
(3)按F8键进入调试语句状态,然后一句一句地执行代码。
执行代码时,将鼠标指针指向Msgbox后面的变量temp,以查看提示信息;
(4)按几次F8后,提示会改变。
因为变量temp的初始值为0,并且在执行“temp=100”语句后变为100,所以提示信息会相应地改变。
图3.30数据提示1图3.31数据提示2
这个选项没有被广泛使用,用户可以检查它。
6.编辑时拖动文本
选择表示可以用鼠标拖动代码,相当于剪切和粘贴功能。
图3.32说明了将其代码从test1程序拖到test2程序的方法。
具体步骤是:
(1)选择要拖动的代码;
(2)按住左键,鼠标下方会出现一个虚线框,表示代码目前可以拖动;
(3)拖动到目标位置并释放鼠标。
如图3.32所示,当前插入点是过程test2的第一行。
当释放鼠标时,代码将被插入到这个位置。
类似于剪切和粘贴。
最终效果如图3.33所示。
图3.32拖动代码图3.33拖动后的效果显示
建议选中该选项以按方面代码移动。
ExcelVBA项目开发自学考试2015-6-15第39/510页
7.默认情况下查看所有模块
该功能用于显示模块代码中所有程序的代码。
当模块中有多个进程时,该功能对减少切换时间非常有用。
如果未选中此选项,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Excel 程序 VBA 开发 自学