二、基础篇——程序控制结构(选择结构)

控制程序执行
使用条件语句和循环语句可以控制 Script 的流程。使用条件语句可以编写进行判断和重复操作的 VBScript 代码。在 VBScript 中可使用以下条件语句: 
If…Then…Else 语句 
Select Case 语句 
使用 If…Then…Else 进行判断
If…Then…Else 语句用于计算条件是否为 True 或 False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息,请参阅比较运算符。If…Then…Else 语句可以按照需要进行嵌套。

1、If … Then

1.VBA的基本语句结构

条件为 True 时运行语句
要在条件为 True 时运行单行语句,可使用 If…Then…Else 语句的单行语法。下例示范了单行语法。请注意此例省略了关键字 Else。 
 Sub FixDate()
     Dim myDate
     myDate = #2/13/95#
     If myDate < Now Then myDate = Now
 End Sub

语法:If 逻辑表达式 Then 语句

例如:If 职称 = “工程师” Then 工资 = 工资 + 100

注:如果语句有多条,则需在结尾添加 End If

If…Then 语句    

要运行多行代码,必须使用多行(或块)语法。多行(或块)语法包含 End If 语句,如下所示: 
 Sub AlertUser(value)
     If value = 0 Then
         AlertLabel.ForeColor = vbRed
         AlertLabel.Font.Bold = True
         AlertLabel.Font.Italic = True
     End If
 End Sub

语法:

If 逻辑表达式 Then

        语句1

        语句2

        ……

End If

If A then B   ‘如果A,那么B

条件为 True 和 False 时分别运行某些语句
可以使用 If…Then…Else 语句定义两个可执行语句块:条件为 True 时运行某一语句块,条件为 False 时运行另一语句块。 
 Sub AlertUser(value)
     If value = 0 Then
         AlertLabel.ForeColor = vbRed
         AlertLabel.Font.Bold = True
         AlertLabel.Font.Italic = True
     Else
         AlertLabel.Forecolor = vbBlack
         AlertLabel.Font.Bold = False
         AlertLabel.Font.Italic = False
     End If
 End Sub

2、If … Then … Else

If A then B  Else C   ‘如果A,那么B,否则C

对多个条件进行判断
If…Then…Else 语句的一种变形允许您从多个条件中选择,即添加 ElseIf 子句以扩充 If…Then…Else 语句的功能,使您可以控制基于多种可能的程序流程。例如: 
 Sub ReportValue(value)
     If value = 0 Then
         MsgBox value
     ElseIf value = 1 Then
         MsgBox value
     ElseIf value = 2 then
         Msgbox value
     Else
         Msgbox “数值超出范围!”
     End If

语法:

If 逻辑表达式 Then

        语句1

    Else

        语句2

End If

ElseIf    If Time <0.5 Then MsgBox “早上好!”

可以添加任意多个 ElseIf 子句以提供多种选择。使用多个 ElseIf 子句经常会变得很累赘。在多个条件中进行选择的更好方法是使用 Select Case 语句。 
使用 Select Case 进行判断
Select Case 结构提供了 If…Then…ElseIf 结构的一个变通形式,可以从多个语句块中选择执行其中的一个。Select Case 语句提供的功能与 If…Then…Else 语句类似,但是可以使代码更加简练易读。
Select Case 结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个 Case 的值比较。如果匹配,则执行与该 Case 关联的语句块:

3、If … Then … ElseIf**

              ElseIf Time>0.75 Then MsgBox “晚上好!”

 Select Case Document.Form1.CardType.Options(SelectedIndex).Text
    Case “MasterCard”
        DisplayMCLogo
        ValidateMCAccount
    Case “Visa”
        DisplayVisaLogo
        ValidateVisaAccount
    Case “American Express”
        DisplayAMEXCOLogo
        ValidateAMEXCOAccount
    Case Else
        DisplayUnknownImage
        PromptAgain
End Select

语法:

**If 逻辑表达式1 Then**


        语句1

ElseIf 逻辑表达式2 Then

        语句2

        ……

Else

        语句n

End If

4、Select Case

语法:

Select Case 测试表达式

             Case 表达式1

                         语句1

**             Case 表达式2
**

                         语句2

                         ……  

             Case Else

                         语句n

End Select

示例:

Dim Number

    Number = 8    ‘设置变量初值。

Select Case Number    ‘判断Number的值。

    Case 1 To 5    ‘ Number的值在1到5之间,包含1和5。

          Debug.Print “Between 1 and
5″‘下一个Case子句是本示例中唯一判断值为True的子句。

    Case 6, 7, 8    ‘ Number的值在6到8之间。

          Debug.Print “Between 6 and 8”

    Case 9, 10    ‘ Number的值为9或10。

          Debug.Print “Greater than 8”

    Case Else’其他数值。

          Debug.Print “Not between 1 and 10”

End Select 

              Else MsgBox “下午好!”

请注意 Select Case 结构只计算开始处的一个表达式(只计算一次),而 If…Then…ElseIf 结构计算每个 ElseIf 语句的表达式,这些表达式可以各不相同。仅当每个 ElseIf 语句计算的表达式都相同时,才可以使用 Select Case 结构代替 If…Then…ElseIf 结构。 

              End If

Select Case 语句

     Select Case Time    ‘Select Case
后面跟的是测试表达式,可以是数值表达式,也可                            
           以是字符串表达式,它是程序要进行判断和比较的值。

      Case Is<0.5  MsgBox “早上好!”      ‘Case
后面跟的是表达式列表,是用来和测试                                      
                            表达式进行比较的值。可以是To或Is的关键      
                                                               
字,也可以是用英文逗号隔开的表达式列表。                                
                                  如果测试表达式是整数,Case 1 to 3 和
Case                                                                  
1, 2, 3 是等效的。

      Case Is>0.75 MsgBox “晚上好!”

      Case Else MsgBox “下午好!”

   End Select  

For…Next 语句

For <循环变量> = <初值> To <终值> [Step 步长值]    
‘<>内的参数为必选部分。[]内的参                                
                                         
 数是可选的,如果省略,默认步长为1。

<循环体>

[Exit For]     ‘可以在循环体任意处加入一句或多句Exit
For,当遇到这个语句,退出For循                    
环,执行Next后的语句。

[循环体]

Next [循环变量]

Do While 语句

Do [While 逻辑表达式] 
‘循环条件:当逻辑表达式的值为True时,执行循环体(Do与                  
                       
Loop之间的语句),否则执行Loop后的语句,可省略,如果省                  
                   略,应在程序中使用Exit
Do语句,让程序满足一定的条件后退出                                    
 循环。

<循环体>

[Exit Do]       ‘可选语句,执行Exit
Do语句后,将跳出循环,执行Loop后的语句。

[循环体]

Loop

GoTo语句,让程序转到另一条语句去执行(除非必须需要,否则应尽量避免使用)

GoTo可以理解为去到指定的地点,指定地点可以在目标代码所在行前加上一个带冒号的字符串或不带冒号的数字作为标签,然后在GoTo的后面写上标签名。

With语句,让代码更简单

如果不想多次重复录入相同的代码,可以用With语句来简化输入。

2.关于VBA过程

VBA的基本过程有Function过程和Sub过程。

声明Sub过程,规范的语句

[Private|Public] [Static] Sub
过程名([参数列表]) ‘Private和Public用于声明过程的作用域名,
同时只能选用一个。如果省略,过程默认为公共过程。如果选用Static,运行程序的过程中将保存该过程里声明的本地变量。

[语句块]

[Exit Sub]  *‘可选语句,执行它将中断执行并退出过程。*

[语句块] 

End Sub

过程作用域

Public 公共过程,可省略

Private 私有过程

3.自定义函数,Function过程

[Private|Public] [Static] Function 函数名([参数列表]) [As
数据类型]   

[语句块]

[函数名=过程结果]

[Exit Function] 

[语句块]

[函数名=过程结果]
 ‘最后必须把函数计算的结果赋给函数名。这一步必不可少。

End Function

声明Function过程的语句和声明Sub过程的语句类似。同Sub过程一样,Function函数也分公共函数和私有函数,如果想声明一个私有函数,请一定要加上Private关键字。

4.合理组织程序,让代码更优美

①缩进,让代码更有层次:一般缩进4个空格。(按Tab键,取消缩进则按Shift+Tab组合键)

②更改长行代码为短行代码:当一条语句过长时,可以在句子的后面输入一个空格和下划线(_),然后换行,把一行代码分成两行。(一般一行代码的长度超过80个字符时,才考虑分行)

③把多行合并为一行:在第一行代码后加上英文冒号,可以接着写第二行代码。通过这样的方式可以把多行短代码合并成一行代码。(不提倡)

④添加注释语句:当注释语句独成一行时,可以使用Rem代替单引号。

发表评论

电子邮件地址不会被公开。 必填项已用*标注