VBA控制结构.doc_第1页
VBA控制结构.doc_第2页
VBA控制结构.doc_第3页
VBA控制结构.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VBA控制结构一、 循环结构 循环结构允许重复执行一行或数行代码。Visual Basic支持的循环结构有:Do.Loop; For.Next;For Each.Next。1. Do.Loop 用Do循环重复执行一语句块,且重复次数不定。Do.Loop 语句有几种演变形式,但每种都计算数值条件以决定是否继续执行。如同 If.Then一样条件必须是一个数值或者值为 True(非零)或 False(零)的表达式。在下面的Do.Loop循环中,只要condition为True就执行statements。 Do While condition statements Loop 当Visual Basic执行这个Do循环时会首先测试 condition。如果condition为False(零),则跳过所有语句。如果condition为True非零),则Visual Basic执行语句,然后退回到Do While语句再测试条件。 因此,只要condition为True或非零,循环可以随意执行多少次。如果condition一开始便为False,则不会执行语句。 Do.Loop语句的另一种演变形式是先执行语句,然后在每次执行后测试condition。这种形式保证statements至少执行一次: Do statements Loop While condition 其他两种演变形式类似于前两个,所不同的是,只要condition为False而不是True,它们就执行循环。 2.For.Next 在不知道循环内需要执行多少次语句时,宜用 Do循环。但是,在知道要执行多少次时,则最好使用For.Next循环。与Do循环不同,For循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For循环的语法如下: For counter = start To end Step increment statements Next counter 参数 Counter、start、end 和 increment 都是数值型的。 注意 :increment参数可正可负。如果increment为正,则start必须小于等于end,否则不能执行循环内的语句。如果increment为负,则start必须大于等于end,这样才能执行循环体。如果没有设置Step,则increment缺省值为1。 在执行For循环时,Visual Basic的执行过程如下。 (1)设置counter等于start。 (2)若increment为正,则测试counter是否大于end。若是的话,则Visual Basic退出循环。(若 increment为负,则Visual Basic测试counter是否小于end。) (3)执行语句。 (4)counter增加1,或者增加 increment(如果已指定的话)。 (5)重复步骤(2)到步骤(4)。 以下代码打印出所有有效的屏幕字体名: Private Sub Form_Click () Dim i As Integer For i = 0 To Screen.FontCount Print Screen.Fonts (i) Next End Sub 3.For Each.Next For Each.Next 循环与 For.Next 循环类似,但它对数组或对象集合中的每一个元素重复一组语句,而不是重复语句一定的次数。如果不知道一个集合有多少元素,For Each.Next 循环非常有用。 For Each.Next 循环的语法如下: For Each element In group statements Next element 例如,下面的子过程打开 Biblio.mdb,把每一个表的名字加到列表框中。 Sub ListTableDefs () Dim objDb As Database Dim MyTableDef as TableDef Set objDb = OpenDatabase(c:vbbiblio.mdb, _True, False) For Each MyTableDef In objDb.TableDefs () List1.AddItem MyTableDef.Name Next MyTableDef End Sub 请记住使用 For Each.Next 时的几点限制: (1)对集合,element只能是Variant变量,或一般的Object变量,或“对象浏览器”中列出的对象。 (2)对数组,element只能是Variant变量。 (3)For Each.Next不能与用户自定义类型的数组一起使用,因为Variant不可能包含用户自定义类型。 二、 使用控制结构 嵌套控制结构可以把控制结构放入另一个控制结构之内(例如在For.Next循环中的If.Then块)。一个控制结构内部包含另一个控制结构叫做 nest(嵌套)。在Visual Basic中,控制结构的嵌套层数没有限制。按一般习惯,为了使判定结构和循环结构更具可读性,总是用缩排方式书写判定结构或循环的正文部分。 例如,下面的过程要把打印机和屏幕共有的字体名全部打印出来: Private Sub Form_Click () Dim SFont, PFont For Each SFont In Screen.Fonts () For Each PFont In Printer.Fonts () If SFont = PFont Then Print SFont End If Next PFont Next SFont End Sub 注意,第一个Next关闭了内层的For 循环,而最后一个Next关闭了外层的For循环。同样,在嵌套的If语句中,End If语句自动与最靠近的前一个If语句配对。嵌套的Do.Loop结构的工作方式也是一样的,最内圈的Loop语句与最内圈的Do语句匹配。 三、 退出控制结构 用Exit语句可以直接退出For循环、Do循环、子过程或函数过程。Exit语句的语法很简单:Exit For在For循环中出现的次数没有限制,Exit Do在Do 循环中出现的次数也没有限制。 For counter = start To end Step increment statementblock Exit For statementblock Next counter, counter ,. Do While | Until condition statementblock Exit Do statementblock Loop Exit Do语句可以在Do循环语法的所有版本中使用。 Exit For和Exit Do非常有用,因为它有时适于立即退出循环,而且不再执行循环中的任何进一步迭代或者语句。例如,在前面的打印屏幕和打印机共有字体的例子中,程序不断将打印机字体和给定的屏幕字体作比较,甚至在已经找到了一个相符的打印机字体后还在继续寻找。对这个函数有一个效率更高的改进版,在此,只要找到相匹配的字体后就立即退出循环: Private Sub Form_Click () Dim SFont, PFont For Each SFont In Screen.Fonts () For Each PFont In Printer.Fonts () If SFont = PFont Then Print Sfont Exit For 退出内圈循环。 End If Next PFont Next SFont End Sub 正如此例所表明的,Exit语句几乎总是出现在 If语句或Select Case语句内部,而If语句或Select Case语句在循环内嵌套。 用Exit语句中断循环时,计数器变量的值会因退出循环的方式而不同: (1)在完成循环时,计数器的值等于上限值加上步进值。 (2)在提前退出循环时,计数器变量保持其值,并遵从有关取值范围的一般规则。 (3)在集合之外迭代时,如果计数器变量为 Object类型,则其值为Nothing;如果计数器变量为 Variant类型,则其值为Empty。 四、 退出子过程或函数过程 也可从控制结构内部退出过程。Exit Sub和 Exit Function的语法和“退出控制结构”中的 Exit For和Exit Do相似。Exit Sub 可以出现在子过程主体内的任何地方,出现的次数随需要而定。 当过程已完成每个任务并可直接返回时,Exit Sub和Exit Function是非常有用的。例如,如果想改动前面的例子,使得对查找到的打印机和屏幕的共有字体,只打印其中的第一个,则可用Exit Sub,如下所示: Private Sub Form_Click () Di

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论