VBA的goto语句,goto 和 gosub 的区别

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值