Excel与VBA程序设计(mini)(8)

2018-11-26 21:27

要使用不同的变量名。下面的代码是正确的。 For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 ... Next K Next J Next I

为提高程序的执行效率,最好使用Long 型数据类型的变量作为循环变量,比起其他

数据类型的循环变量,如Variant 类型,使用长整型循环变量可以提高0.5 倍以上的运行效 率。在不影响程序意义的情况下,可以省略Next 语句之后的counter。

For Each...Next 语句

另外一个经常使用的循环是 For Each…Next 循环,此循环主要针对一个数组或集合中 的每个元素,重复执行一组语句。其语法如下: For Each element In group [statements] [Exit For] [statements] Next [element]

For Each...Next 语句的语法具有以下几个部分(表 2-12)。

2. VBA 简介 37

Excel 与VBA 程序设计 Copyright ? 2005 马维峰

表 2-12 For Each...Next 语句的组成部分

部分 描述

element 必要参数。用来遍历集合或数组中所有元素的变量。对于集合来说,element 可 能是一个 Variant 变量、一个通用对象变量或任何特殊对象变量。对于数组而 言,element 只能是一个Variant 变量。

group 必要参数。对象集合或数组的名称(用户定义类型的数组除外)。 statements 可选参数,针对group 中的每一项执行的一条或多条语句。

如果集合中至少有一个元素,就会进入 For...Each 块执行。一旦进入循环,便先针对

group 中第一个元素执行循环中的所有语句。如果group 中还有其它的元素,则会针对它们 执行循环中的语句,当group 中的所有元素都执行完了,便会退出循环,然后从Next 语句

之后的语句继续执行。在循环中可以在任何位置放置任意个Exit For 语句,随时退出循环。 可以将一个For...Each...Next 循环放在另一个之中来组成嵌套式For...Each...Next 循环。但 是每个循环的element 必须是唯一的。

以下示例使用 For Each...Next 语句搜寻集合中的所有成员的Text 属性,查找―Hello‖ 字符串。

Dim Found, MyObject, MyCollection Found = False '设置变量初始值。

For Each MyObject In MyCollection '对每个成员作一次迭代。 If MyObject.Text = \

Found = True ' 将变量 Found 的值设成 True。 Exit For ' 退出循环。 End If Next

在对集合进行循环时,使用For Each 循环要比For 循环快1/3 以上,因此,尽量对集

合对象使用For Each 循环,因为一方面,For Each 循环不需要设置循环变量,不容易出错, 而且循环速度又比For 循环快。对于数组,For Each 循环的速度基本没有优势,大概可以 快10%左右,因此,可以根据实际情况选择适当的循环。

除了以上介绍的循环语句,VBA 还有一个While...Wend 语句,此语句只是为了向前兼 容保留的,不推荐使用,其效果与Do…Loop 语句一致,但后者提供了更好的控制结构。

2.4.5. With 语句

With 语句可以在一个单一对象或一个用户定义类型上执行一系列的语句,一方面可以

2. VBA 简介 38

Excel 与VBA 程序设计 Copyright ? 2005 马维峰

节约代码输入量,一方面 With 语句也可以提高运行效率。With 语句的语法如下: With object [statements] [statements] End With

Object 代表一个对象或用户自定义类型的名称,statements 表示要执行在 object 上的 一条或多条语句。

With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要

改变一个对象的多个属性,可以在With 控制结构中加上属性的赋值语句,这时候只是引用 对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用With 语句来给 同一个对象的几个属性赋值。 With MyLabel .Height = 2000 .Width = 2000

.Caption = \End With

程序一旦进入With 块,object 就不能改变。因此不能用一个With 语句来设置多个不

同的对象。可以将一个With 块放在另一个之中,而产生嵌套的With 语句。但是,由于外 层With 块成员会在内层的With 块中被屏蔽住,所以必须在内层的With 块中,使用完整的 对象引用来指出在外层的With 块中的对象成员。

With 语句经常使用在对一个对象或用户自定义类型需要进行反复引用的情况下,特别 是在循环中,如果要反复引用某个对象,那么最好通过With 语句来引用该对象。

2.4.6. Exit 语句

我们前边已经使用过多次 Exit 语句,现在做一总结,Exit 语句可以退出Do...Loop、

For...Next、Function、Sub 或Property 代码块(Property 介绍见类模块一节)。其语法为: Exit Do Exit For Exit Function Exit Property Exit Sub

各用法的说明见表 2-13:

2. VBA 简介 39

Excel 与VBA 程序设计 Copyright ? 2005 马维峰

表 2-13 Exit 语句

语句 描述

Exit Do 提供一种退出Do...Loop 循环的方法,并且只能在Do...Loop 循环中使 用。Exit Do 会将控制权转移到 Loop 语句之后的语句。当Exit Do 用在 嵌套的Do...Loop 循环中时,Exit Do 会将控制权转移到Exit Do 所在位 置的外层循环。

Exit For 提供一种退出For 循环的方法, 并且只能在For...Next 或 For Each...Next 循环中使用。Exit For 会将控制权转移到Next 之后的语句。

当Exit For 用在嵌套的For 循环中时,Exit For 将控制权转移到 Exit For 所在位置的外层循环。

Exit Function 立即从包含该语句的Function 过程中退出。程序会从调用Function 的语 句之后的语句继续执行。

Exit Property 立即从包含该语句的Property 过程中退出。程序会从调用Property 过程 的语句之后的语句继续执行。

Exit Sub 立即从包含该语句的Sub 过程中退出。程序会从调用Sub 过程的语句之 后的语句继续执行。

2.5. 用户窗体

VBA 包括一类特殊的对象――用户窗体(UserForm),用户窗体是一个窗口或对话框, 用以构成应用程序的用户界面部分。使用用户窗体可以提供一个图形用户界面,在此界面 上,可以为其添加按钮、图片、文本框等控件,作为一个自定义窗口或者对话框,供用户 与程序进行交互。

2.5.1. 设计用户窗体

通过在工程资源管理器右键单击,选择“插入 - 用户窗体”可以新建一个用户窗体 (图 2-6),新建的用户窗体缺省名称为“UserForm1”,新建以后的用户窗体是一个空白区

域,可以从工具箱中选择控件为用户窗体添加界面元素。选中用户窗体,在属性窗口内可 以设置其属性(如果工具箱和属性窗口没有显示,可以通过视图菜单激活之),也可以拖动 改变其大小。窗体具有设计模式和代码模式之分,在资源管理器窗口选择窗体,可以在其 工具栏或者通过右键切换窗体的设计模式和代码模式。设计模式下可以通过鼠标拖拽以及 属性调整来可视化设计用户窗体的外观以及样式。在代码模式下,可以和在一般的模块窗 体一样,定义变量、过程,并且可以响应窗体和控件的事件。

新建一个窗体,在属性窗口,将此窗体的“名称(Name)”设置为“frmMyHelloWorld”,

2. VBA 简介 40

Excel 与VBA 程序设计 Copyright ? 2005 马维峰

Caption 设置为“Hello, My First Form”。 图 2-6 用户窗体

从工具箱中选择不同的控件,然后在用户窗体上按下鼠标左键,拖动即可将控件添加

到用户窗体。从工具箱选择“文本框”,添加到用户窗体,设置其名称为“txtHelloMsg”; 选择“命令按钮”,添加到用户窗体,设置其名称为“cmdHello”,Caption 为“Hello”。双击

按钮,VBA IDE 自动打开代码窗口,并新建一个名为“cmdHello _Click”的过程,这个过 程称为事件,当用户点击按钮,此过程内的代码就会执行。在此过程中输入如下代码: Private Sub cmdHello_Click()

Me.txtHelloMsg.Text = \End Sub

切换到用户窗体的设计模式,在工具栏上点击“运行”可以测试此用户窗体,刚刚新 建的用户窗体将显示在桌面,单击按钮,文本框的文字将会变成“Hello, My VBA!”(图

2-7)。

2. VBA 简介 41

Excel 与VBA 程序设计 Copyright ? 2005 马维峰

图 2-7 运行的My First Form

这就是用户窗体编程的基本概念,我们可以操作的窗体,文本框,按钮等都是对象, 准确来说,都是ActiveX 控件,通过对这些对象的可视化设计,设置其属性,然后在其事 件内写入需要的操作。

总而言之,用户窗体是VBA 中的一个对象,我们可以通过设置其属性、调用其方法、 响应其事件来操作用户窗体和其之上的控件,当用户对用户窗体的元素进行操作时(通过 鼠标、按钮),响应的事件就会被执行,这种编程模式就叫做事件驱动的编程模式。我们可 以创建一个过程来显示设计好的用户窗体。

显示一个用户窗体需要经过 2 个步骤。首先这些用户窗体必须被装载(Loaded),接着 显示(Show)这个窗体。装载窗体就是为窗体分配内存,初始化这个窗体。显示窗体则是 创建一个图形窗口,显示给用户。装载窗体可以通过调用窗体的Load 方法,显示窗体可 以调用窗体的Show 方法。如果调用Show 方法时窗体还没有装载,则会首先自动装载窗 体。相应的,可以通过Hide 隐藏窗体,通过Unload 来卸载(销毁)窗体。如果需要快速 显示窗体,在Show 之前应该先Load 之,对重复使用的窗体,不要Unload 而是Hide 之, 可以快速显示窗体,提高效率。

窗体的显示模式有 2 种:模式窗体(modal)和无模式窗体(modeless)。对于modal

窗体,显示后将停止显示之后的代码直到退出或隐藏此窗体,并且必须退出或隐藏此窗体 后,才可以操作非此窗体的其他界面元素(包括宿主程序Excel 和其他用户窗体),例如 MsgBox 就是模式窗体;而对于无模式窗体,在其显示之后,不阻塞后续代码和界面元素, 后续代码继续执行,其他界面元素也可以操作。可以使用以下语句显示一个无模式窗体: UserForm1.Show vbModeless 模式窗体显示代码为: UserForm1.Show vbModal

对于Show 方法,如果不指定模式,则缺省为模式窗体。

对于一个窗体,与其创建、显示、销毁相关的有 3 个事件,Activate 事件发生在窗体

2. VBA 简介 42

Excel 与VBA 程序设计 Copyright ? 2005 马维峰

称为当前激活窗体之时,Deactivate 事件则发生在窗体不再是当前激活窗体之时,Terminate 发生在窗体销毁(Unload)之时。

2.5.2. 事件驱动

下面介绍一下事件的有关概念。事件简单来说,就是由用户或者系统触发的、可以在 代码中响应的一段代码。例如,我们移动鼠标、点击窗体和按钮、敲击键盘、窗体的显示 移动等等都会产生一系列的事件,通过编写代码中响应这些事件,当发生此类事件时,例 如单击了一个按钮,程序代码就会进行相应的操作。例如在前边的例子中,在按钮单击事 件中(cmdHello_Click()),我们书写了改变文本框文本的代码。

窗体、窗体上的控件都定义了很多事件,例如鼠标移动、单击等事件。我们自定义的 类模块也可以有自定义的事件(参见本章类模块一节)。

用户窗体编程时,编写一个事件的响应代码有 2 种方式,对于缺省事件,双击这个控


Excel与VBA程序设计(mini)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:201509学期C语言程序设计作业1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: