惊蛰 歌词:Excel 中的自定义宏简介

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 13:40:06

您在 Excel 中执行的许多任务都是一次性的(例如输入某天的销售数据或向工作表 (工作表:在 Excel 中用于存储和处理数据的主要文档。也称为电子表格。工作表由排列成行或列的单元格组成。工作表总是存储在工作簿中。)中添加公式)。不过,还有一些任务需要频繁反复执行但可以使用 Excel 中的工具很快完成(例如更改单元格区域的格式)。除此之外,您可能还会常常碰到一两个既需要反复执行又步骤繁琐的任务。

例如,您可能希望在每次向同事演示报告时突出显示工作表中几个重要的单元格。要完成这样的任务,您不必手动执行一系列繁冗的步骤,而是可以通过创建宏或录制一系列操作来完成这些步骤。或者,如果您熟悉 Microsoft Visual Basic? for Applications (VBA) 编程语言,也可以从头编写自定义宏。无论选择哪种方式,在创建宏后,均可以根据需要运行、编辑或删除该宏。

本文向您介绍面向对象的编程和 Visual Basic 编辑器,您可以在此环境中编写自己的 Excel 宏。如果您打算一试身手,编写自定义的宏,请参阅 Frank Rice 写的 Microsoft Office Excel 2003 对象模型的超简易指南(英文),以便对此过程有深入的了解。

使用 Visual Basic 编辑器

Visual Basic 编辑器是一个功能强大的工具,它使您得以扩展宏的功能和多用性,而非局限于通过简单的录制就可以完成的任务。要打开该工具,请在“工具”菜单上指向“宏”,然后单击“Visual Basic 编辑器”。(或按 Alt+F11)。

要打开某个特定的宏,请在“工具”菜单上指向“宏”,然后单击“宏”(或按 Alt+F8)。在“宏名”对话框中,选择要编辑或查看的宏,然后单击“编辑”即可打开 Visual Basic 编辑器。

在 Visual Basic 编辑器中使用面向对象的编程

在 Visual Basic 编辑器中,您可以使用面向对象的编程来创建自己的程序。大体上,程序只是计算机按指定顺序运行的一组指令。

在面向对象的编程语言中,计算机代码的各个特征均基于环境中的某些事物。这些“事物”(毫不奇怪)被表示为对象,所有操作和数据都封装在这些对象中。在 Excel 中,对象可以是工作簿、工作表、单元格区域和外部文件。

通常,在充实程序的过程中,要用到对象的四个特征:属性、方法、事件和集合。

属性

简单地说,属性是描述其所属对象的某个特征的变量。Excel 中常见的对象属性是名称,它代表着您或 Excel 指定给工作簿、工作表、单元格区域或其他对象的标识值。例如,如果更改了工作表的名称(使用 VBA 代码或右键单击工作表标签),则会更改名称属性中存储的值。

您可以直接在 VBA 中为某些工作表属性(如名称)设置新的值。要更改其他工作表属性,可能需要在 Excel 中录制一个操作(例如,保护某个单元格区域时执行的步骤),或使用一个方法(将在下一节中介绍)。

在 VBA 程序中,属性是使用点标记引用的:首先写下对象名称,然后写下属性名称,在两个元素之间用句点分隔。比方说,若要更改工作表的名称,则需要使用 Worksheet.Name 属性。

方法

方法是一种对象“知道”如何执行的操作。比方说,Excel 窗口中显示的工作表叫做活动工作表。在 Excel VBA 代码中,可以首先对您要处理的工作表调用 Activate 方法,从而使该工作表成为目标。 在 Activate 方法运行后,附带了该方法的工作表会移动到 Excel 窗口中所有其他工作表的前面,以供编辑。

与属性一样,方法也是通过点标记来调用的。例如,若要重新计算工作表中的所有公式,则可以调用 Worksheet.Calculate 方法。

事件

正如属性是一种可量化的对象特性、方法是一种对象知道如何执行的操作一样,事件是一种被对象“意识到”已经发生的操作。例如,Excel 2003 可以意识到下面的事件(此外还有许多其他事件):

  • 打开或关闭一个工作簿。
  • 激活或停用一个工作表。
  • 保存一个工作簿。
  • 单击一个图表。
  • 按下一个键(或组合键)。
  • 在一个单元格中键入数据。
  • 重新计算一个工作表上的公式。
  • 访问一个超链接。

Excel 包含若干事件处理程序或代码例程,用于监视特定的操作。如果某个操作确实发生,并且您已告知 Excel 在发生该事件时要执行的操作,那么 Excel 将运行事件处理程序中的代码。例如,如果在创建新的工作簿后,希望 Excel 以一组层叠窗口的形式显示所有打开的工作簿,则可以创建以下事件处理程序:

Private Sub App_NewWorkbook(ByVal Wb As Workbook)   Application.Windows.Arrange xlArrangeStyleCascadeEnd Sub

您可能不知道这个事件处理程序例程的每个元素都是用来做什么的,不过不必担心。现在您只需要注意代码中间的一行,该行告诉 Excel 使用层叠样式排列窗口。您可以使用 Excel 中的菜单命令(“窗口”菜单,“重排窗口”命令,“层叠”子命令)获得相同的结果。不过,如果您希望每当发生某个特定事件时即执行一个操作,则可以使用 VBA 让其自动执行,免得您劳神费力。 

集合

在面向对象的编程中,您要了解的最后一个元素是集合。顾名思义,集合是包含在另一个对象中的一组类型相同的对象。举例说来,一个工作簿包含由一个或多个工作表组成的集合。如果要对工作簿中的每个工作表进行同样的更改,则可以用编程方式依次遍历集合中的每个工作表并进行更改。

如果您以前创建过程序,那么可能运行过 For...Next 循环,该循环允许您使用与下面类似的顺序,多次重复一组指令。(本例将活动工作簿的目录路径添加到前三个工作表页脚的右侧。)

For i = 1 to 3   Worksheets(i).PageSetup.RightFooter = PathNext i

对此 For...Next 循环的上限进行硬编码(即分配设置值)的问题是,在每次添加或删除工作表时,都必须更改代码。如果是一两次,也不算什么,但如果您管理着许多代码,难免会在某些位置忘记更改这些代码。这将导致一些错误,事后您不得不去纠正它们。更严重的情况是,人们可能一直没有注意到这些错误,直到年度报告的前 500 份副本已经全部打印出来,编审人员才发现格式是错误的,而这时候您已经关掉手机,正在度假海滩上欣赏落日。

您可以使用一段代码来得出工作簿中的工作表数,不过还有更简单的方法:即改用 For Each...Next 循环。For Each...Next 循环可以查找集合中的对象数目(例如工作簿中的工作表数),并遍历出现的每个对象。使用该技术,可以按如下方式编写上述代码:

For Each Wksht in Worksheets    Wksht.PageSetup.RightFooter = PathNext Wksht      

在标准的 For...Next 循环中,值是不断递增的;与之不同的是,For Each...Next 循环只搜索 Worksheets 集合的下一个成员,在找不到时会停止搜索。

Visual Basic 编辑器及窗口

Visual Basic 编辑器可在不同的窗口中显示不同的信息。开始编写宏时,需要重点了解以下几个窗口:“项目资源管理器”窗口、“属性”窗口和“代码”窗口。

“项目资源管理器”窗口

在直接打开 Visual Basic 编辑器时,可以使用“项目资源管理器”窗口来选择要处理的宏。“项目资源管理器”将在一个树状视图(类似于 Windows? 资源管理器中的树状视图)中显示所有项目(代码组)和宏。该树状结构中的根对象或基本对象是您所处理的当前工作簿以及其他一些打开的工作簿和外接程序。

VBA 项目使用的主要元素分别存储在每个项目的独立文件夹中。这些元素包括:

  • 对象(如上文所述)
  • 模块,其中包含与工作表相关的宏代码
  • 类模块,它们是您为工作簿创建的用户定义对象的定义
  • 用户窗体,提供了一个可视界面,您可以在其上放置图形控件,例如按钮、图像和文本区域

在下面的示例中,当前工作簿被标识为 VBAProject。该工作簿包含的三张工作表(Sheet1、Sheet2 和 Sheet3)和整个工作簿 (ThisWorkbook) 均显示在 Microsoft Office Excel Objects 文件夹中。所有在 VBA 中编写的宏或录制宏都显示在“模块”文件夹中。所有类模块或用户窗体分别显示在“类模块”文件夹和“窗体”文件夹中。

“属性”窗口

“项目资源管理器”窗口的正下方是“属性”窗口,用于查看和更改与选定对象相关的各种属性。对于模块而言,通常只有名称属性是可用的。工作表有其他一些可更改的属性(如 StandardWidthDisplayPageBreaks)。对“属性”窗口中的属性的更改通常在处理用户窗体时进行。

 注释   “属性”窗口的名称属性框中显示的对象名称可能有别于 Excel 中相应的对象名称。两个名称可能稍有不同,造成这种情况的原因是,Visual Basic 编辑器为对象使用默认的命名规则(例如,名称不能包含空格、必须以字母开头、不能是保留字且长度不能超过 31 个字符)。不过,即使名称不同,它们内部也依然联系在一起,以确保引用适当的对象。

“代码”窗口

“代码”窗口是 Visual Basic 编辑器中最大的窗口,其顶部有两个下拉框,您可以使用左侧的下拉框(即“对象”框)选择要处理的对象。如果仅处理代码,则该框显示默认的通用对象。第二个下拉框(即“过程”框)用于选择当前模块中的各个宏。在模块中添加或删除宏时,“过程”框中也将同时添加或删除该宏。    

您还可以使用向上键和向下键来滚动代码列表,直至找到所需的宏。在滚动代码的同时,“过程”框会随之更新,以反映当前的宏。