1、If…Then…Else…End If语句
根据条件的值,可使用If…Then…Else…End If语句运行指定的语句或一个语句块。语句可根据需要嵌套多级,然而,为了程序可读性有时使用Select Case语句。
1.如果条件为True则运行语句
当条件为True时,若只要执行一个语句,则可以使用单行的If…Then…End If语法。下列的示例显示了单行语法,省略了Else关键字:
Sub FixDate()
Dim myDate As Date
myDate = #2/13/2006# '给myDate变量赋值
'如果myDate的值小于当前系统日期,将当前系统日期赋值给myDate
If myDate < Now Then myDate = Now
End Sub
2.如果条件为True,运行某些语句;条件为False,运行其他的语句,例如:
Sub Sample261()
Dim myDate As Date
myDate = #2/13/2006# '给myDate变量赋值
If myDate < Now Then '如果myDate的值小于当前系统日期
myDate = Now '将当前系统日期赋值给myDate
Else ' myDate的值不小于当前系统日期
myDate = Now - 5 '将当前系统日期减去5天后,再赋值给myDate
End If
End Sub
3.如果第一个条件为False时,测试第二个条件及以后的其他条件
如果第一个条件为False,则可在If...Then...Else语句中加上ElseIf语句来测试第二个条件。例如,下列的函数根据工作分类来计算奖金。如果所有If和ElseIf语句中条件都是False,则会运行Else之后的语句块。
' Performance和Salary作为参数传递给函数Bonus
Function Bonus(ByVal Performance As Integer, ByVal Salary As Single)
Dim Bonus As Single
If Performance = 1 Then '如果 Performance等于1,奖金等于薪水的0.1倍
Bonus = Salary * 0.1
'如果 Performance等于2,奖金等于薪水的0.09倍
ElseIf Performance = 2 Then
Bonus = Salary * 0.09
Else '如果 Performance不等于1也不等于2,则奖金等于0
Bonus = 0
End If
End Function
2、 Select Case…Case…End Select语句
当一个表达式与几个不同的值相比较时,可以使用Select Case分支判断语句替换使用在If…Then…Else…End If语句中的ElseIf。
If…Then…Else…End If语句会计算每个ElseIf语句的不同的表达式。在控制结构的顶部,而Select Case 语句只计算表达式一次。
在下面的示例中,Select Case语句会计算发送给此过程的参数performance。请注意,每个Case语句可以包含一个以上的值、一个值的范围、一个值的组合以及比较运算符。如果Select Case语句与Case语句的任何值都不匹配,则可选的Case Else语句运行。
' Performance和Salary作为参数传递给函数Bonus
Function BonusSelect(ByVal Performance As Integer, ByVal Salary As Single)
Dim Bonus As Single
Select Case Performance '考察Performance的数值
Case 1 '如果Performance的值等于1
Bonus = Salary * 0.1
Case 2, 3 '如果Performance的值等于2或者3
Bonus = Salary * 0.09
Case Is > 8 '如果Performance的值大于8
Bonus = 100
Case Else '如果Performance的值不等于1或2或3,也不大于8
Bonus = 0
End Select
End Function
3、 For…To…Next语句
可以使用For…To…Next语句去重复一个语句块,而重复次数的数值是指定的。For 循环使用一个计数变量,当重复每个循环时计数变量的数值会增加或减少。
使用For…To…Step…Next,其中Step可以指定增加(正数)或减少(负数)步长值。
可以在计数变量到达它的结束值之前,使用 Exit For 语句来退出For…To…Next语句,其中可以用If…Then…Else…End If语句作判断。
示例如下:
Sub NewTotal()
Dim myNum As Integer, Total As Integer
For myNum = 16 To 2 Step -2 'myNum从16到2循环,每次减少2
Total = Total + myNum 'Total变量累加myNum变量的数值
If myNum < 5 Then '如果myNum值小于5时退出循环
Exit For
End If
Next
MsgBox "The total is " & Total '显示累加的Total变量的数值
End Sub
4、 For Each…Next语句
For Each…Next语句作用于集合中的每个对象或是数组中的每个元素。当循环执行一次VBA会自动设置一个变量,例如:
Sub ForEachSheet()
Dim wkSheet As Worksheet 'wkSheet定义为工作表类型的变量
'在本工作簿之内所有工作表中循环
For Each wkSheet In ThisWorkbook.Worksheets
MsgBox wkSheet.Name '显示每个工作表的名称
Next
End Sub
可以在循环体中使用Exit For语句来退出循环。
5、 Do…Loop语句
可以使用Do…Loop语句循环执行其中的语句块,循环执行所用的时间是不确定的,当程序编制有错误时,容易进入死循环。所以一定要检查好循环中的跳出逻辑条件,当条件为True或直到条件变成True时,循环终止。
1.Do While条件…Loop
只有当满足条件时才进入循环体,例如:
Sub doWhile1()
Dim I As Integer
Do While I < 10 'I小于10时,循环继续
I = I + 1 '累加I变量值
Loop
End Sub
2.Do…Loop While条件
先进入循环体执行一次,然后再判断是否满足条件,例如:
Sub doWhile2()
Dim I As Integer
Do
I = I + 1 '累加I变量值
Loop While I < 10 'I小于10时,循环继续
End Sub
3.Do until条件…Loop
只有当达到条件时,才退出循环体,例如:
Sub doWhile3()
Dim I As Integer
Do Until I = 10 'I等于10时,退出循环
I = I + 1 '累加I变量值
Loop
End Sub
4.Do…Loop until条件
先进入循环体,直到满足条件时,才退出循环,例如:
Sub doWhile4()
Dim I As Integer
Do
I = I + 1 '累加I变量值
Loop Until I = 10 'I等于10时,退出循环
End Sub
5.Do…Loop,没有任何条件,循环体中用If…Then…Else…End If语句判断,如果符合条件,用Exit Do语句退出循环。
6、 GoTo、On…GoTo语句
1.GoTo语句
无条件地跳转到程序的某个标记,此标记可以利用任何字符组合,以字母开头,以冒号结尾。
2.On…GoTo语句
如果希望根据表达式的结果而决定跳转到某个标记处,需要利用On…GoTo语句,语句法如下:
On expression GoSub destinationlist
On expression GoTo destinationlist
示例如下:
Sub OnGosubGotoDemo()
Dim Number As Integer, MyString As String
Number = 1 ' 设置变量初值
' 因为Number的值等于1,所以以下的示例会跳转到Sub1,Line2
' 下一句跳转到Sub1,在 On...GoSub退出后,程序会回到此处来继续完成
On Number GoSub Sub1, Sub2
'因为Number + 1的值是2,所以跳转到第二个Line2,完成Line2标记区段
On Number + 1 GoTo Line1, Line2
' 在On...GoTo退出之后,程序不会回到此处
Exit Sub
Sub1:
MyString = "In Sub1"
Return
Sub2:
MyString = "In Sub2"
Return
Line1:
MyString = "In Line1"
Line2:
MyString = "In Line2"
End Sub
7、 On Error错误控制语句
如果不使用On Error语句,则任何运行时错误都是致命的。也就是说,结果会导致显示错误信息并中止运行。
程序中设置了On Error语句后,运行环境中的错误捕获也需要设置。在VBE中,选择菜单栏中的【工具】→【选项】命令,选择【通用】选项卡,在【错误捕获】选项区域中选中【遇到未处理的错误时中断】单选按钮,如下图所示。设置后,在程序运行中,只有遇到没有设置On Error语句的错误,程序才会提示并中断。
编辑搜图
请点击输入图片描述(最多18字)
1.On Error GoTo line
如果发生一个运行时错误,则控件会跳到line标记行,激活错误处理程序。指定的line 必须在一个过程中,否则会发生编译时间错误。
错误处理程序不是Sub过程或Function过程,它是一段用行标记的代码。
2.On Error Resume Next
程序从紧随产生错误语句之后的语句继续执行,或是从紧随最近一次调用含有On Error Resume Next语句的过程中的语句继续运行。这个语句可以忽略运行时产生的错误,使程序得以继续执行。
3.On Error GoTo 0
On Error GoTo 0停止在当前过程中处理错误。即使过程中包含编号为0的行,它也不把行0指定为处理错误的代码的起点。
8、其他常用语句
1.With语句
With语句的作用是在用户自定义类型或对象内执行一系列语句。例如,设置某个对象的格式属性,具体示例如下:
Sub WithSample()
Range("B5:B10").Select '选择需要设置格式的单元格
With Selection.Font '设置单元格的字体
.Name = "宋体" '设置为宋体
.FontStyle = "常规" '风格是常规
.Size = 16 '设置字体的大小
End With
End Sub
程序中经常使用With语句,增加程序的可读性和运行效率。
2.While…Wend语句
与Do…Loop语句相同,满足一定条件后,进入循环体。