其他语句

前面各节介绍了Excel VBA和Python中常见的语法结构,除了它们以外还有一些比较特殊的语句,用于实现跳出、跳转、终止和占位等操作,本节对它们进行介绍。

Excel VBA中的其他语句

Excel VBA中的其他语句包括End语句、Exit语句、Goto语句和Stop语句等。

1.End语句

End语句使宏的运行立刻终止。如果宏正在被另一个宏通过MacroRun语句运行,则该宏接着MacroRun运行。

2.Exit语句

Exit语句使宏不再运行剩下的语句。其语法格式为

code.vba
Exit {All|Do|For|Function|Property|Sub|While}

其中各参数的意义为:

Do 退出Do循环

For 退出For循环

Function 退出函数块。注意:本语句清除Err并将Error$设置为空。

Property 退出属性块。注意:本语句清除Err并将Error$ 设置为空。

Sub 退出过程块。注意:本语句清除Err并将Error$ 设置为空。

3.Goto语句

利用Goto语句跳转到标签处并从该处接着运行。只能跳转到当前自定义的过程、函数或属性中的标签处。

4.Stop语句

利用Stop语句暂停运行。如果重新运行,将从下个语句开始运行。使用End语句终止宏的运行。

下面的过程中,当I等于3时,暂停运行。

code.vba
Sub Main
  For I = 1 To 10
    Debug.Print I
    If I = 3 Then Stop
  Next I
End Sub

Python中的其他语句

Python中的其他语句包括break, continue和pass语句等。

break语句

break语句用在while循环或for循环中,在必要的时候终止和跳出循环。

下面用for循环对给定的数据区间进行累加求和,要求累加和的大小不能超过100,也就是说,此时用break语句终止和跳出循环。

本示例的py文件存放路径为Samples\ch05\Python\sam05-014.py。

code.python
sum=0
num=0
for num in range(100):
    old_sum=sum
    sum+=num
    if sum>100:break  #累加和大于100时跳出循环
print(num-1)  #数字
print(old_sum)  #小于100的累加和

在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,则IDLE命令行窗口显示下面的结果:

code.python
>>> = RESTART: …\Samples\ch05\Python\sam05-014.py
13
91

也可以在while循环中使用break语句跳出循环。用while循环改写上面的程序。本示例的py文件存放路径为Samples\ch05\Python\sam05-015.py。

code.python
sum=0
n=0
while(n<=100):
    old_sum=sum
    sum+=n
    if sum>100:break  #累加和大于100时跳出循环
    n+=1
print(n-1)
print(old_sum)

运行该程序,输出相同的计算结果。

continue语句

continue语句跟break语句的作用类似,都是用在循环中,用于跳出循环。不同的是,break语句是跳出整个循环,continue语句则是跳出本轮循环。

下面的for循环输出0-4区间内的整数,但是不输出3。本示例的py文件存放路径为Samples\ch05\Python\sam05-016.py。

code.python
for i in range(5):
	if i==3:continue
  	print(i)

第2行用了一个单分支判断结构,迭代变量取值为3时用continue跳出本轮循环。

在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,则IDLE命令行窗口显示下面的结果:

code.python
>>> = RESTART: …/Samples/ch05\Python\sam05-016.py
0
1
2
4

可见,数据3没有输出。

pass语句

pass语句是占位语句,它不做任何事情,用于保持程序结构的完整性。在判断结构中,判断条件满足时,如果什么也不执行,会出错,即在文件或命令行执行下面的语句:

code.python
if a>1:  #什么也不做

会出错。此时用pass语句放在冒号后面,虽然还是什么也不做,但保证了语法上的完整性,不会出错了。即

code.python
if a>1:pass  #什么也不做

另外,在自定义函数时,如果定义一个空函数,也会出错。此时函数体放一个pass语句,就不会出错了。