Excel-VBA基础(14):VBA中控制结构介绍

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语句的错误,程序才会提示并中断。


v2-59644bb8597a82d950a7599c0d38ce9a_b.jpg

编辑搜图

请点击输入图片描述(最多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语句相同,满足一定条件后,进入循环体。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值