GoTo <Line number> in VBA
从VBA帮助文件:
GoTo Statement
Branches unconditionally to a specified line within a procedure.
Syntax
GoTo _line_
The required line argument can be any line label or line number.
Remarks
GoTo can branch only to lines within the procedure where it appears.
我的问题是,如何使用
(注意:出于好奇,我要问这个。我无意以这种方式实际使用
我了解您不喜欢"以行号开头"这一答案,但您无法与事实争论。这正是他们的意思。
VBA / VB6的语法被设计为与QuickBasic的语法向后兼容,在此之前与GW-Basic / MS-Basic的语法向后兼容,该语法可追溯到1970年代末甚至更早:原始的Dartmouth BASIC语言是在60年代创建的。
在MS-Basic中,就像该时代的其他所有Basic实现一样,添加到程序中的每一行都必须以行号开头。行号告诉基本解释器两件事:a)您正在存储行(否则解释器将立即执行该行),以及b)该行所属的程序位置。为什么做这么神秘的事?因为当发明Basic的初衷是交互式的,所以在电传式打印终端上,交互式的唯一形式是命令行提示符。
没有标签。
典型的Basic会话可能看起来像这样,其中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Welcome to B.A.S.I.C. Ok <--- Ok told you the interpreter was ready >LIST <--- print the program Ok <--- No program, so nothing to list. >PRINT 2 + 7 <--- No line number, so execute immediately 9 <--- The command executes Ok >30 PRINT 2 + 7 <--- Line number, so store the command in position 30 Ok >10 I = 42 <--- Line number, so store in line 10 Ok >20 PRINT I + 12 <--- Store on line 20, so insert between 10 and 30 Ok >LIST <--- Print the program so far 10 I = 42 20 PRINT I + 12 30 PRINT 2 + 7 Ok >RUN <--- Execute the stored program now 54 <--- line 10 has no output. Line 20 outputs this 9 <--- line 30 outputs this Ok <--- Done running the program >20 <--- an empty line number: it means delete the line Ok >LIST 10 I = 42 30 PRINT 2 + 7 <--- line 20 is gone! |
原始吗?也许可以,但是您必须从某个地方开始。
那时,您总是使用GOTO,方法是提供希望代码跳转到的行号。这就是它的工作方式。例如:
1 2 3 4 5 6 | 10 PRINT"Testing," 20 I = 1 30 PRINT I;"," 40 IF I >= 3 THEN 60 50 GOTO 30 60 END |
QuickBasic是Microsoft发布的Basic的增强版本,它支持有选择地将程序编译为可执行文件,而不是在解释器中交互式运行。除其他增强功能外,它还添加了以下两个功能:
-
由于它使用全功能的GUI文本编辑器进行全屏显示,因此不需要行号来指定每条新行的去向;您只需移动光标并输入:传统的行号现在是可选的。实际上,他们不赞成这样做,因为在功能齐全的编辑器中,它们只是妨碍了操作。但是它们不能仅仅删除它们,因为它们对于BASIC兼容性至关重要,因此仍受到支持。即使在VBA中,它们仍然是。
-
由于他们不希望您使用行号,因此对于需要以行号为目标的命令,例如
GOTO ,他们需要一个替代方法。现在,您被允许放置可用作GOTO等目标的行文本标签。
因此,您可以看到行号不仅仅是"由数字组成的行标签"。实际上,它们是一种替代语法,为了与该语言的较早版本兼容,已对其进行了维护。
就是这样。帮助文件只是告诉您有关GOTO的" modern \\"语法(带有文本标签)的信息,如果您确实愿意,您仍然可以将遗留语法与行号和遗留在其中的遗留GOTO语法一起使用1960年代中期。
1 2 3 4 5 6 7 | Sub Jump() 10 Dim A As Integer 20 A = 25 30 GoTo 50 40 A = 50 50 Debug.Print A End Sub |
这是对过去(非常古老的)BASIC时代(需要行号)的回溯。现在使用标签。
1 2 3 4 5 6 7 8 | Sub Jump2() Dim A As Integer A = 25 GoTo JumpToHere A = 50 JumpToHere: Debug.Print A End Sub |
但是使用GoTo被认为是不好的编程,除了
旧式行号的一个非常有用的目的是进行错误处理。许多人使用Sort的标准错误处理程序:
进程名称(参数)
错误的goto处理程序
码
。
。
退出proc
处理程序:
debug.print错误号
n
n