购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 快速了解Excel VBA

VBA的英文全称是Visual Basic for Applications,它是一门标准的宏语言。VBA语言不能单独运行,只能被Office软件(如Word、Excel等)调用。VBA是基于Visual Basic(简称VB)发展而来的,它不但继承了VB的开发机制,而且与VB所包含的对象和语言结构相似,即VB所支持的对象的大多数属性和方法VBA也支持,只是在事件或属性的特定名称方面稍有差异。另外,两者的集成开发环境(Integrated Development Environment,IDE)也几乎相同。经过优化,VBA专门用于Office软件中的各应用程序。

VBA是一种面向对象的解释性语言,通常被用来实现Excel中没有提供的功能,编写自定义函数,实现自动化功能等。Excel VBA是指以Excel环境为母体、以Visual Basic为父体的类VB开发环境,即在VBA的开发环境中集成了大量的Excel对象与方法,而在程序设计、算法方式、过程实现方面与VB基本相同。通过VBA可以直接调用Excel中的对象和方法来提供特定功能的开发与定制,利用定制的功能与界面能极大地提高日常工作效率。

如图1-1所示是在Excel中运行VBA后的界面。本章会具体介绍该界面中的各项菜单命令及其属性,以帮助读者更好地学习VBA编程。

图1-1

1.1.1 功能与作用

VBA是一种完全面向对象的编程语言,由于其在开发方面的易用性和强大的功能,被嵌入到许多应用程序中作为开发工具。VBA的主要功能和作用如下:

● 在VBA中,可以整合其宿主应用程序的功能,自动地通过键盘、鼠标或者菜单进行操作,尤其是大量重复的操作,这样就大大提高了工作效率。

● 可以定制或扩展其宿主应用程序的功能,并且可以增强或开发该应用程序的某项功能,从而实现用户在操作中需要的特定功能。

● 提供了建立类模块的功能,从而可以使用自定义的对象。

● VBA可以操作注册表,并且能与Windows API结合使用,从而创建功能强大的应用程序。

● 具有完善的数据访问与管理能力,可通过DAO(Data Access Object,数据访问对象)对Access数据库或其他外部数据库进行访问和管理。

● 能够使用SQL语句检索数据,与RDO(Remote Data Object,远程数据对象)结合起来建立C/S(客户机/服务器)级的数据通信。

● 能够使用Win32 API提供的功能,建立应用程序与操作系统间的通信。

1.1.2 代码编辑窗口

使用VBA进行操作需要用到代码编辑窗口,用户录制的宏都会保存在其模块中,然后直接进入VBA模块中输入VBA代码。

代码编辑窗口和工作簿窗口类似,可以进行最大化、最小化等操作。在进行实质性操作之前,首先要保证VBA模块中有一些VBA代码,这些代码可以直接输入,也可以复制、粘贴,或者使用Excel宏录制器录制一系列操作,再将其转换为VBA代码。

下面介绍如何打开代码编辑窗口,并向模块中放置VBA代码。

1.激活“开发工具”选项卡

在Excel 2021默认环境下没有VBA的启动按钮,因此启动VBA之前需要经过一些设置,具体操作步骤如下:

在Excel工作簿中单击“文件”选项卡,再单击“选项”标签,如图1-2所示,打开“Excel选项”对话框。

单击左侧的“自定义功能区”标签,然后在右侧的“主选项卡”列表框中选中“开发工具”复选框,如图1-3所示。

图1-2

图1-3

单击“确定”按钮,即可在Excel选项卡的后面自动添加“开发工具”选项卡,如图1-4所示。

图1-4

“开发工具”选项卡分成了4个选项组,分别是“代码”“加载项”“控件”和“XML”,具体描述如表1-1所示。

表1-1 “开发工具”选项卡中各选项组的功能描述

(续)

在该选项卡下的“代码”选项组中单击Visual Basic按钮,即可启用VBA界面,如图1-5所示。

图1-5

2.打开代码编辑窗口并创建模块

打开代码编辑窗口并创建模块的操作步骤如下:

新建Excel工作簿,然后按Alt+F11组合键打开VBA编辑器。单击“插入→模块”菜单命令(见图1-6),即可插入VBA模块。

图1-6

3.代码编辑窗口中的功能区域介绍

代码编辑窗口主要包括工作表代码编辑窗口、模块代码编辑窗口、窗体代码编辑窗口等,是用于编写、显示以及编辑Visual Basic代码的窗口,如图1-7所示。

图1-7

知识拓展

查看某个窗体或模块等对象的代码,主要有4种方法:

● 在工程资源管理器中选中要查看的窗体或模块,然后选择“视图→代码编辑窗口”菜单命令。

● 在工程资源管理器中直接双击控件或窗体。

● 选中要查看的窗体或模块,右击,在弹出的快捷菜单中选择“查看代码”命令。

● 直接按F7键。

打开各类代码编辑窗口后,可以查看不同窗体或模块中的代码,并且可以在彼此之间进行复制、粘贴等操作。在默认VBA操作界面中,代码编辑窗口显示在右上方区域。

在代码编辑窗口中,各种功能区域的主要用法如下:

● “对象”列表框:显示所选对象的名称。可以单击列表框右侧的倒三角箭头来显示此窗体中的对象。如果在“对象”列表框中显示的是“通用”,则“过程/事件”列表框中会列出所有声明,以及为此窗体创建的常规过程。

● “过程/事件”列表框:显示“对象”列表框中所含控件的所有Visual Basic事件。若选择了一个事件,则与该事件名称相关的事件过程就会显示在窗体代码编辑窗口中。

● 窗口拆分条:主要用于拆分代码编辑窗口,可以向下拖动拆分条将代码编辑窗口分隔成两个水平窗格,且两者都具有滚动条。将拆分条拖动至代码编辑窗口的顶部或底端,或者双击拆分条,均可以恢复成默认的单个代码编辑窗口。

● 代码编辑区域:主要进行事件代码编辑、修改等操作。

● 过程视图:显示所选的程序,并且同一时间在代码编辑窗口中只能显示一个程序。

● 全模块视图:显示模块中全部的程序代码。

4.了解代码编写原则

代码的编写原则如下:

● 编写代码时善用注释,简要说明每个过程的目的,便于理解代码。

● 在代码中尽量使用灵活变量。

● VBA中的大部分对象都有相应的默认属性,比如Range对象的默认属性是Value,虽然该属性可省略,但是为了便于理解,建议写出来。

● 编写循环代码时,尽量不要使用GoTo语句,除非是非用不可。

● 使用循环结构设计代码时,只要达到了目的就应该退出循环,这样可以减少不必要的循环功能。

● 在代码中经常需要对单元格或者单元格区域进行引用,当区域中添加或者删除行时,容易造成引用区域错误,建议首先对指定的单元格区域定义名称。

● 编写代码的时候,保持一个模块实现一项任务,一个窗体实现一项功能,将实现不相关功能的代码放在不同模块中,在窗体模块的代码中只包含操作窗体控件的过程,这样的代码更容易维护和重复利用。

● 在代码中添加错误处理代码,跟踪并采取相应的操作,避免运行代码时发生错误,从而导致其停止运行。

5.快速编写代码的技巧

了解代码的输入方法后,接下来介绍快速地输入代码和编写高效代码的技巧。尤其是在编写较长代码的时候,可以利用VBA的相关设置和工具,有效提高输入代码的速度。操作步骤如下:

在已彔制了宏的工作簿中,按Alt+F11组合键打开VBA编辑器迚入VBA界面,然后单击“工具→选项”菜单命令,弹出如图1-8所示的“选项”对话框,可以看到各个选项卡下默认的选项情况。

图1-8

取消对其中的“自动语法检测”复选框的勾选,这样可以避免代码模块的语句在出现编译错误时弹出如图1-9所示的错误消息提示框。

图1-9

知识拓展

默认情况下,“选项”对话框中会自动勾选“自动列出成员”“自动显示快速消息”以及“自动显示数据提示”复选框,这都是为了在输入代码的时候可以提供辅助输入提示或者必要的参考信息。

1.1.3 对象和集合

1.对象

Excel VBA中的应用程序是由多个对象构成的,包括工作簿、工作表、工作表上的单元格区域以及图形、图表等。

首先我们要知道,Office对象是VBA程序操控的核心,而90%以上的VBA代码都是在操作对象的,并利用对象的方法来读取或写入对象的属性值。所以我们在学习VBA编程之前,必须要对Office对象有一个全面的认识。在对Excel的对象、属性和方法进行学习之后,才能更好地帮助我们编写一些或简单或复杂的VBA代码,有效地提高学习和工作效率。

图1-10展示了Excel程序中的相关对象的名称,当然这只是Excel中的一部分对象。通过使用本书进行深入的学习,读者自然会了解更多的对象、属性以及集合,从而掌握代码的编写。

对象代表了应用程序中的元素,是我们要用代码操作和控制的实体,包括工作簿、工作表、工作表上的单元格区域、图表、控件、窗体等。为了方便理解,我们举一个例子。比方说一个台灯是对象,那么台灯的颜色就是其属性,而购买台灯这个动作则是一个方法,颜色属性和购买行为都是建立在台灯这个主体对象之上的,没有了主体对象,就无所谓属性和方法了。

对象可以相互包含,就像一个文件里可以包含多个文件夹,而这个文件夹又可以被其他的文件夹包含一样,一个工作簿对象可以包含多个工作表对象,一个工作表对象又可以包含多个单元格(或图表、图形等),这种对象的排列模式称为Excel的对象模型。

图1-10

所谓对象,就是帮助构成应用程序的元素,每个对象模型都包含两种类型的对象:集合对象和独立对象。在Excel VBA中,每个元素都可以被称为独立对象,例如工作表、单元格等。集合对象是由一组独立对象构成的,如“Workbooks”集合即表示所有Excel工作簿。

VBA中的每个对象都包含特性,特性控制着其外观、行为、名称等信息,这种特性即被称为对象的属性。用户可以利用代码或属性窗口对对象的属性进行定义或赋值。

对象属性的语法表示为:

<对象>.<属性>=值

在语法表示中,特别要注意对象与属性之间应由“.”间隔。

例如,通过定义Application对象的Caption属性值,将应用程序的标题行改为“work”,则代码为:

Application.Caption="work"

2.集合

集合是一个包含几个其他对象的对象,是相同类型对象的统称,例如工作簿、汽车等。比如在Excel程序中,Workbooks集合包含在Application对象里,当我们引用某个工作簿的时候,要遵循从大到小的规则依次引用,比如C:\Excel VBA速查宝典\第1章 Excel VAB概述.doc。

很多Excel对象都属于集合,例如在每个Workbook对象中都会有Worksheet集合。Worksheet集合是一个可通过VBA调用的对象。Workbook对象中的每个Worksheet对象都位于Worksheet集合中。

要引用Worksheet集合中的一个Worksheet对象,可以通过它在集合中的位置来引用,比如在包含了一个名为MySheet工作表的工作簿中运行以下两段代码,可以发现运行结果是一样的。

Worksheet(1).Select

Worksheets("MySheet").Select

1.1.4 属性和方法

1.属性

Excel VBA程序要获取对象的特征信息或者要改变对象的特征都需要通过操作具体的属性来实现。要改变Excel中的对象表名属性,用户可以通过改变工作表的Name属性来改变工作表的名称。比如要对Sheet1执行重命名操作,可以编写如下代码:

Sheets("Sheet1").Name="Sheet2"

2.方法

方法指的是对象能执行的操作,比如“Add”是属于工作表集合的一个方法,使用该方法能在指定的位置插入一个或多个工作表。方法实际上类似于一个VB过程,但这种过程是由系统根据可能的需求事先定义且封装好的,其内部代码不可见。也就是说方法是系统事先为对象定义的特定功能,它能有效简化用户的编程,但对象方法只能被调用,不能被修改,如图1-11所示。

图1-11

方法与属性除了内容不同外,在代码书写上也是有区别的,方法的后面不需要等号。“对象.方法”是指对对象执行某个操作,因此不需要等号,“对象.方法”已经是完整的代码。“对象.属性=值”是指对对象的某个属性赋值,单独的“对象.属性”不是完整的代码,必须有等号才行。如果通过代码读取对象的某个属性值,那么对象与对象的属性后面必须有等号或者函数。如果是修改对象的属性值,那么在属性后面必须有等号,用于赋值。如果只有对象及属性,那么代码是不完整的,无法执行。 1KBNxebsQFdjA0CU2GgpcVGtNh7DoVHzkTvASt6lLD1ejDLawO8dIaSclNAfKrpZ

点击中间区域
呼出菜单
上一章
目录
下一章
×