`
deepfuture
  • 浏览: 4337929 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79473
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68485
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101630
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281473
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14632
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65697
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31367
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45284
社区版块
存档分类
最新评论

VBA控制结构

 
阅读更多

 

 

一、 循环结构
   循环结构允许重复执行一行或数行代码。Visual Basic支持的循环结构有:Do...Loop

For...Next
For Each...Next

1. Do...Loop
  用Do循环重复执行一语句块,且重复次数不定。Do...Loop 语句有几种演变形式,但每种都计算数值条件以决定是否继续执行。如同 If...Then一样条件必须是一个数值或者值为 True(非零)或 False(零)的表达式。在下面的Do...Loop循环中,只要conditionTrue就执行statements
    
Do While condition
    
statements
Loop
   当Visual Basic执行这个Do循环时会首先测试 condition。如果conditionFalse(零),则跳过所有语句。如果conditionTrue非零),则Visual Basic执行语句,然后退回到Do While语句再测试条件。

   因此,只要conditionTrue或非零,循环可以随意执行多少次。如果condition一开始便为False,则不会执行语句。

   Do...Loop语句的另一种演变形式是先执行语句,然后在每次执行后测试condition。这种形式保证statements至少执行一次:

    
Do
      
statements
    
Loop While condition
   其他两种演变形式类似于前两个,所不同的是,只要conditionFalse而不是True,它们就执行循环。


2.For...Next
  在不知道循环内需要执行多少次语句时,宜用 Do循环。但是,在知道要执行多少次时,则最好使用For...Next循环。与Do循环不同,For循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或者减少。For循环的语法如下:

    
For counter = start To end [Step increment]
      
statements
    
Next [counter]
   参数 Counterstartend 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)执行语句。

   (4counter增加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:\vb\biblio.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变量。

   (3For 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 ForFor循环中出现的次数没有限制,Exit DoDo 循环中出现的次数也没有限制。

    
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 ForExit 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 ForExit Do相似。Exit Sub 可以出现在子过程主体内的任何地方,出现的次数随需要而定。

   当过程已完成每个任务并可直接返回时,Exit SubExit Function是非常有用的。例如,如果想改动前面的例子,使得对查找到的打印机和屏幕的共有字体,只打印其中的第一个,则可用Exit Sub,如下所示:

  
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 Sub '退出过程。

           
End If
         
Next PFont
       
Next SFont
     End Sub

小草网络工作室,2006530日,经过删减

 

分享到:
评论

相关推荐

    VBA控制结构[参考].pdf

    VBA控制结构[参考].pdf

    Excel 2007 VBA 高级编程宝典

    《Excel2007VBA高级编程宝典》讲授如何使用VBA开发办公应用系统,内容包括认识Excel,Excel的函数使用,VBA的含义和功能,VBA的语法,VBA各种运算符和表达式,VBA流程控制,VBA的程序结构,VBA窗体设计,Excel对象,...

    Excel VBA开发技术大全-伍远高 高清PDF

    《Excel VBA开发技术大全》共分7部分31章,分别介绍了Excel 2007开发平台概述、使用宏、Excel VBA的开发环境、VBA基础、程序控制结构、使用数组、使用过程、管理模块、处理字符串和日期、Excel对象概述、使用...

    Excel VBA开发技术大全

    VBA基础 程序控制结构 使用数组 使用Windows API

    Excel VBA开发技术大全pdf

    《Excel VBA开发技术大全》 VBA基础 程序控制结构 使用数组 使用Windows API

    Excel VBA代码荟萃

    VBA的确非常强大,其与VB完全一致的语法结构,高效控制Office对象模型的能力,令无数人为之折腰。利用VBA,几乎可以在Office里面做任何其他程序能做的事情。如果立志成为专业的Office Developer,那么疯狂的使用VBA...

    Excel VBA 高效快速生成家谱世系图

    3.测试数据与族谱表结构完全相同,是一个完全真实的家谱,因隐私原因,姓名全部改成了“测试”。 4.由于Excel2003有256列的列宽限制,所以此代码必须在Office2007以上版本运行。 5.代码中注释了打印设置相关的内容,...

    Excel VBA开发技术大全 伍远高 清华大学出版社 随书光盘

    《Excel VBA开发技术大全》共分7部分31章,分别介绍了Excel 2007开发平台概述、使用宏、Excel VBA的开发环境、VBA基础、程序控制结构、使用数组、使用过程、管理模块、处理字符串和日期、Excel对象概述、使用...

    Excel VBA范例大全 罗刚君 高清PDF 分卷1

    本书共分17部分,主要内容包括:单元格选择技巧与选区统计、单元格数据处理技巧、条件格式及数据突现方式、排序、数据筛选、处理图形与艺术字、处理图表中的技巧、控制工作表、多工作表操作、工作表页面设置与打印、...

    各种EXCEL~VBA命令大全

    1. Excel VBA基础语法:介绍Excel VBA的基本语法、数据类型、变量、运算符、控制结构等,帮助您快速掌握VBA编程的基础知识。 2. 工作簿和工作表操作:提供关于如何使用VBA操作工作簿和工作表的方法,包括创建、打开...

    Excel VBA范例大全 罗刚君 高清PDF 分卷2

    本书共分17部分,主要内容包括:单元格选择技巧与选区统计、单元格数据处理技巧、条件格式及数据突现方式、排序、数据筛选、处理图形与艺术字、处理图表中的技巧、控制工作表、多工作表操作、工作表页面设置与打印、...

    最新Excel VBA活用范例大辞典 光盘

    包括操作管理Excel VBA常见对象(Application对象、Workbook对象、Worksheet对象、Range对象、Chart对象、Shape对象、窗体控件对象以及对象事件)、创建自定义菜单和自定义工具栏、操作数据库、设计程序结构、打印...

    Access 2007 VBA宝典 1/4

     ·创建Access窗体,作为数据交换的控制面板:  ·使用COM和Access加载项添加功能;  ·使用SQL Server数据:  ·使用XML自定义Access 2007功能区。  在各个Microsoft Office应用程序之间无缝地传递Access数据...

    Access 2007 VBA宝典 3/4

     ·创建Access窗体,作为数据交换的控制面板:  ·使用COM和Access加载项添加功能;  ·使用SQL Server数据:  ·使用XML自定义Access 2007功能区。  在各个Microsoft Office应用程序之间无缝地传递Access数据...

    VBA题库管理系统 信息初始化 生成试卷

     本题库管理系统利用教育测量理论的最新研究成果,合理设置试题参数,动态制订组卷策略,使题库结构科学、合理。同时,采用先进的软件技术和算法,优化了时空效率,增加了通用性、可维护性和可移植性。  二、基本...

    VBA循环语句

    for循环是一种重复控制结构,它允许开发人员有效地编写需要执行特定次数的循环

    VB程序语句与控制结构.doc

    VB程序语句与控制结构.doc

    Excel VBA实用技巧大全 附书源码

    目录 01001获取Excel版本 01002获取Excel的安装路径 01003获取当前用户名称 ...01005获取当前操作系统的名称和版本号 01006获取启动Excel的路径 01007获取打开Excel文件时的默认路径 01008获取模板保存的默认路径 ...

    Access 2007 VBA宝典 4/4

     ·创建Access窗体,作为数据交换的控制面板:  ·使用COM和Access加载项添加功能;  ·使用SQL Server数据:  ·使用XML自定义Access 2007功能区。  在各个Microsoft Office应用程序之间无缝地传递Access数据...

Global site tag (gtag.js) - Google Analytics