1 goto语句功能和局限性
- 用处
- goto 可以语句跳转
- 但肯定不如 do while , 还有call function 等更好
- 坏处
- 容易导致死循环,如果不加判断条件判断
- 只能是本过程内,本函数内,不能跨过程等。
2 goto语句的语法
语法:goto 行号/行标签
- goto可以跳转到 行号,或行标签
- 语法: 标签+冒号(可以省略冒号)
- 行号:
- 错误:可以查VBE的行数 (数字)
- 行号:其实就是数字标签
- 行标签:需要先定义
- 可以是 字母开头,甚至是中文都可以
2.1 正确写法:
- 带不带冒号都可以
- lineA:
- lineA
- 1:
- 2
- 哈哈: '尝试过,中文都可以。。。
2.3 测试的代码和验证结果
Sub ft1()
i = 0
lineA:
22
1: i = i + 1
Debug.Print "i=" & i
If i <= 3 Then
Debug.Print "执行1"
GoTo 1
ElseIf i <= 6 And i > 3 Then
Debug.Print "执行22"
GoTo 22
ElseIf i <= 9 And i > 6 Then 'if不给力?
Debug.Print "执行A:"
GoTo lineA:
ElseIf i <= 12 And i > 9 Then
Debug.Print "执行A"
GoTo lineA
End If
End Sub
代码里用if判断是给力的,之前写的有点画蛇添足了
用if 或 用 select case 都是可以的
Sub ft2()
i = 0
lineA:
22
1: i = i + 1
Debug.Print "i=" & i
If i <= 3 Then
Debug.Print "执行1"
GoTo 1
ElseIf i <= 6 Then
Debug.Print "执行22"
GoTo 22
ElseIf i <= 9 Then 'if不给力?
Debug.Print "执行A:"
GoTo lineA:
ElseIf i <= 12 Then
Debug.Print "执行A"
GoTo lineA
End If
End Sub
4 VBE自带的行号,不是goto的需要 标签/行号
- VBE其实是有默认行号显示的,只是如果窗口不宽时,可能会被自动隐藏
- 但是没直接显示在左边行首,而是显示在上面
- 但是这个行号没法用在goto 语法里
VBE如果想加其他编辑器一样的左边行首行号
下面有很多大牛讨论过
VBA代码编辑器中显示行号-Excel VBA程序开发-ExcelHome技术论坛 -
如何在VBA代码中添加行号?-Excel VBA程序开发-ExcelHome技术论坛 -
5 goto的其他用法 on .... goto
用来处理报错的
on error goto
on error resume next
on goto
on gosub
还有其他用法,比如
if .... then goto