1 语法
1.1 goto
sub a1()
...
goto index1
...
exit sub ’ 加这个为了保险,不是语法要求,避免死循环,也可以加其他判断语句保险,或者错误捕捉语句等等
index1:
...
end sub
1.2 gosub
sub a1()
...
gosub sub1
...
sub1:
...
return ’gosub 在sub标签后面可以不加return, 如果不加,就不会返回
end sub
2 用法注意点,共同的注意点,加 exit sub 等必须死循环
- 所有的sub function 结束前都必须加end sub/function
- 但是,有了goto 语句,末尾最好还额外加一个 exit sub 或 exit function
2.1 影响
- 1 如果是非循环的block,加在末尾是不影响的,但是对有goto的语句,可以防止死循环等
- 2 对本身是循环的block,一般在block末尾加一句 exit sub 也没关系,除非刚好影响到循环了。但是加在非末尾就会有影响了。
3 goto 标签名 和 gosub 标签名的区别
- goto 标签名是单向的
- gosub 标签名,也是单向的。
- 如果 gosub 对应的标签名加上了return,就是双向的,执行完 标签的语句后,在return可以跳回。就是调用完gosub 后,会返回到 gosub 起始对应的位置,然后继续往下执行。
Sub test40()
I = 1
GoTo lineA
I = 99
Debug.Print "i=" & I
Exit Sub
lineA:
Debug.Print "i=" & I
End Sub
Sub test41()
I = 1
GoTo lineA
I = 99
Debug.Print "i=" & I
' Exit Sub
lineA:
Debug.Print "i=" & I
End Sub
Sub test42()
I = 0
lineA:
Debug.Print "i=" & I
For I = 1 To 10
I = I + 1
Next
GoTo lineA
I = 99
Debug.Print "i=" & I
' Exit Sub
End Sub
Sub test50()
I = 1
GoSub sub1:
I = 99
Debug.Print "i=" & I
Exit Sub
sub1:
Debug.Print "i=" & I
Return
End Sub
Sub test51()
I = 1
GoSub sub1:
I = 99
Debug.Print "i=" & I
Exit Sub
sub1:
Debug.Print "i=" & I
'Return
End Sub