Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 11420|回复: 27

[分享] 【烟花原创】VBA零基础之第19篇 Goto语句

[复制链接]
发表于 2013-11-13 00:02 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2013-12-4 09:04 编辑

  最近芒果台的《爸爸去哪儿》很火,今天咱们也来聊聊代码去哪儿之Goto语句
  通过Goto语句,可以无条件地转移到过程中的指定的行,从而实现不同程序段间作流程控制
  

  语法:
   GoTo Line
   Line:必要参数,line可以是过程内任意的行号行标签

  什么是行号?
  用来识别一行代码。

  行号可以是任何数值的组合,在使用行号的过程内,该组合是唯一的。
  行号必须在从一列开始。(输入时,不在第一列,输入完成后,会自动调整到第一列)

  Sub GotoStatementDemo()
   Dim Number, MyString
   Number = 1
   '设置变量初始值。
   

   If Number = 2 Then GoTo 1 Else GoTo 2
   '判断 Number 的值以决定要完成那一个程序区段
   

   1:               MyString = "Number等于1"
   GoTo 3

   '完成后跳转到最后一行。
   

   2               
   MyString = "Number等于2"
   

   3:Debug.Print MyString
   '将MyString变量的值显示在“立即”窗口。
  End Sub

  经过测试:
   A.在代码区输入行号后接着输入语句(不用在行号后输入空格)后,VBE会自动帮你在行号和语句之间填入一个空格。

   例如当在一行输入5msgbox"a"回车后,VBE会帮你修正为5  msgbox  "a"
   B.行号可以单独占一行
   C.行号后面可加可不加冒号

  什么是行标签?
  用来指示一行代码。行标签可以是任何字符的组合,以字母开头,以冒号 (:) 结尾。
  行标签与大小写无关,必须从第一列开始。

  Sub GotoStatementDemo()
   Dim Number, MyString
   Number = 1
   '设置变量初始值。
   If Number = 1 Then GoTo Line1 Else GoTo Line2
   '判断 Number 的值以决定要完成那一个程序区段

   Line1:
   MyString = "Number等于1"
   GoTo LastLine

   ' 完成后跳转到最后一行。

   Line2:MyString = "Number等于2"

   LastLine:
   Debug.Print MyString

   '将MyString变量的值显示在“立即”窗口。
  End Sub

  对于标签,冒号是要求必须使用的。
  如果不使用,在有编译错误的提示(子过程或函数未定义)
  同一个模块内,标签也必要是唯一的。
  例如:
   Line1:msgbox "a"
   Line1:msgbox "a"
    运行时会有编译错误 (当前范围内重复声明)

   另外需要注意的地方: 太多的 GoTo 语句,会使程序代码不容易阅读及调试。

   尽可能使用结构化控制语句(Do...Loop、For...Next、If...Then...Else、Select Case)。

发表于 2013-11-13 00:06 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-13 08:18 | 显示全部楼层
帮楼主补充个代替goto的方法

Do
...
Exit Do '代替goto
...
Loop While 0    '代替label:
回复

使用道具 举报

发表于 2013-11-13 08:40 | 显示全部楼层
GOTO万恶之源
回复

使用道具 举报

发表于 2013-11-13 08:56 | 显示全部楼层
突然有个想法:
VBA中只有Exit(类似于Brake),但没有COUNTINUE
GOTO可以用做CONTINUE 回到下一次循环的开始  {:1012:}
回复

使用道具 举报

发表于 2013-11-13 09:03 | 显示全部楼层
野狐就不可以?非要狗兔?
回复

使用道具 举报

 楼主| 发表于 2013-11-13 09:09 | 显示全部楼层
CheryBTL 发表于 2013-11-13 08:56
突然有个想法:
VBA中只有Exit(类似于Brake),但没有COUNTINUE
GOTO可以用做CONTINUE 回到下一次循环的开 ...

VB.NET里已经有这个了。提前结束这一轮循环,接着再从下轮。
回复

使用道具 举报

发表于 2013-11-13 09:21 | 显示全部楼层
hwc2ycy 发表于 2013-11-13 09:09
VB.NET里已经有这个了。提前结束这一轮循环,接着再从下轮。

表示没用过VB.NET{:2412:}
但依稀记得QB就有的
回复

使用道具 举报

 楼主| 发表于 2013-11-13 09:22 | 显示全部楼层
CheryBTL 发表于 2013-11-13 09:21
表示没用过VB.NET
但依稀记得QB就有的

QuickBasic?
接触得真早。
回复

使用道具 举报

发表于 2013-11-13 09:30 | 显示全部楼层
hwc2ycy 发表于 2013-11-13 09:22
QuickBasic?
接触得真早。

嗯,10几年没用过,早就成老古董了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 20:59 , Processed in 0.293108 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表