VBA GoTo 结构

VBA 中,在程序运行时,使用 GoTo 结构,跳转到指定标签处运行,从而不执行 GoTo 语句和指定标签之间的代码。

在实际的 VBA 开发中,Goto 结构多用于处理错误的情形,即发生错误时,跳转到处理错误的代码处。

语法

GoTo 结构由 GoTo 语句和标签语句组成。基本语法如下:

GoTo [标签]
'被跳过的代码
...
[标签]:
'被执行的代码

跳转的位置由 Goto 关键词后的 [标签] 告诉程序,VBA 会在代码中查找对应的 [标签]: 关键词,从标签下一行继续执行程序。

需要注意的是,跳转处的标签,后接冒号 ( : ) 。

实例

下面的例子说明 GoTo 结构的基本用法。使用 VBA 作除法,如果除数是零,则跳转到程序末尾,提示除数不符合规范。

Sub MyCode()

    Dim num1 As Double
    Dim num2 As Double
    Dim result As Double
    
    num1 = 100
    num2 = 0
    
    If num2 = 0 Then GoTo error
    
    result = num1 / num2
    
    Exit Sub
    
error:
    MsgBox "除数不能为零"

End Sub

可以看到,例子中 num2 是除数,程序判断 num2 是否为零,如果是,则跳转到 Error 标签处,除法部分不会被执行。

VBA GoTo 结构

总结

Goto 结构相对简单,实际开发中不像三大结构使用频繁,但是在一些情形中使用,可以使代码更简洁易读。GoTo 语句常用于错误处理外,还可以用在「上一步/下一步」类情形中,根据用户需求,重复执行同一个步骤,这方面内容在以后做更多介绍。

大家有什么疑问,可以留言或私信咨询。

转载注明:文章转载自「懒人Excel - www.lanrenexcel.com
本文链接:VBA GoTo 结构
订阅评论
提醒
20 评论
最新
最旧 最多投票
内联反馈
查看所有评论
catloverlifelong
7 月 前

为什么messagebox要缩写成MsgBox呢?

YUXIN
2 年 前

老师我想问下,我自己练习写了一个循环+GOTO,想要算表格中5组数的除法结果,但是程序每次都在遇到除数为零的那组数之后就停了。我理解的是,跳到了error之后程序自动执行下一步 end sub.

我尝试把删掉Exit sub 并把 next i 移到error 之后,但是发现这样的话剩下几组的结果都变成了NA,不知道应该如何修改,老师可以帮忙解答一下吗?

Sub mycode()

Dim i As Double
Dim result As Double

For i = 1 To 5

If Cells(i, 8).Value = 0 Then GoTo error

result = Cells(i, 7).Value / Cells(i, 8).Value

Cells(i, 9) = result

Next i

Exit Sub

error:
Cells(i, 9) = “NA”

End Sub

YUXIN
2 年 前
回复给  懒人Excel

谢谢老师,明白了。放在循环里面是对的,但是不能直接让error的结果等于NA,否则除数不为零的组合结果也会因为循环内部的顺序结构执行了cells(i,9)=”NA”这一步。

我觉得更好一点的解决办法应该是用IF ELSE,但是看到这篇就想说用用GOTO这个看看有没有学明白。

SaSa
2 年 前

GoTo一般是搭配选择结构来使用的。我看到在这里面ifThen是不用搭配end if的是不?

Helen
2 年 前

非常感谢您的分享 系统明了

洛阳教育者
2 年 前

大神的微信号是啥,能加微信吗

大宝徐
3 年 前

大神说goto语句要少用,但goto语句用起来多简洁啊

Anna^
3 年 前

error在这里是什么数据类型呢?为什么可以直接用?“标签:”这个格式也是默认链接被执行程序吗

phoibos
4 年 前

GoTo语句的举例中,IF语句结束为什么不是用”End If”,而是”Exit Sub”?

砖家拍教授
3 年 前
回复给  懒人Excel

那为什么用“exit sub” 而不是“end sub”呢,这两者的区别能讲一下吗?

phoibos
4 年 前
回复给  懒人Excel

明白了,感谢!

20
0
希望看到您的想法,请您发表评论x