转到VBA中的<行号>

The*_*kle 7 vb6 excel vba goto

从VBA帮助文件:

GoTo声明

无条件地分支到过程中的指定行.

句法

GoTo _ line _

必需的参数可以是任何行标签或行号.

备注

GoTo只能分支到它出现的过程中的行.

我的问题是,如何使用跳转到行号GoTo?(我知道如何跳转到标签.)

(注意:为了好奇,我问这个.我无意以GoTo这种方式使用.)

Eur*_*lli 20

我理解你不喜欢答案"用行号开头",但你不能与事实争论.这正是他们的意思.

VBA/VB6的语法设计为向后兼容QuickBasic的语法,在此之前使用GW-Basic/MS-Basic的语法,可以追溯到1970年代后期甚至更早:原始的达特茅斯BASIC语言是创建于60年代.

在MS-Basic中,与该时代的其他所有Basic实现一样,您添加到程序中的每一行都必须以行号开头.行号告诉Basic解释器两件事:a)你正在存储行(否则解释器会立即执行它),以及b)行所属程序的位置.为什么这么神秘?因为当Basic被发明时,它是一个交互式的,在一个电传式打印终端上,唯一的交互形式是命令行提示的世界.

而且没有标签.

典型的Basic会话可能看起来像这样,其中>代表命令处理器提示符(这是组成的,但足够接近它的工作方式).请记住:没有光标键或屏幕.你正在打字机上打字 - 用一卷纸而不是一个屏幕 - 打字机也会在纸上打印回复你!:

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!
Run Code Online (Sandbox Code Playgroud)

原始?也许,但你必须从某个地方开始.

那时候,你总是通过提供你希望代码跳转的行号使用GOTO.它只是它的工作方式.例如:

10 PRINT "Testing, "
20 I = 1
30 PRINT I; ","
40 IF I >= 3 THEN 60
50 GOTO 30
60 END
Run Code Online (Sandbox Code Playgroud)

QuickBasic是Microsoft发布的Basic的增强版本,支持可选地将程序编译为可执行文件,而不是以交互方式在解释器中运行.除了其他增强功能外,它还添加了以下两个功能:

  • 因为它使用功能齐全的GUI文本编辑器全屏运行,所以不需要行号来指定每个新行的去向; 你只需移动光标并输入:传统的行号现在是可选的.事实上,他们感到气馁,因为在一个功能齐全的编辑器中,他们只是挡路了.但他们不能只删除它们因为它们对BASIC兼容性如此重要,所以它们仍然受到支持.他们仍然是,甚至在VBA.

  • 由于他们不希望您使用行号,因此他们需要替代需要行号作为目标的命令,例如GOTO.您现在可以放置可用作GOTO等目标的行文本标签.

因此,您可以看到行号不仅仅是"由数字构成的行标签".它们实际上是一种替代语法,为了与旧版本的语言兼容而保持这种语法.

而已.帮助文件只是简单地告诉你GOTO的"现代"语法(带有文本标签),而且 - 如果你真的想要 - 你仍然可以使用遗留语法,包括中间发明的行号和遗留GOTO语法-1960的.

  • 现在这让我有了一些方法.很好的答案.+1.现在,另一个原因是数字很糟糕(以及为什么我们去了10年):35 I = I + 1 (5认同)
  • @TomCollins,哦,小伙子,我是个笨蛋!好笑......我想我可能只是保持原样并让你的评论讲述故事:-) (5认同)

Tom*_*ins 9

Sub Jump()
10 Dim A As Integer
20 A = 25
30 GoTo 50
40 A = 50
50 Debug.Print A
End Sub
Run Code Online (Sandbox Code Playgroud)

这是旧的(非常古老的)BASIC日的回归,需要行号.现在使用标签.

Sub Jump2()
   Dim A As Integer
   A = 25
   GoTo JumpToHere
   A = 50
JumpToHere:
   Debug.Print A
End Sub
Run Code Online (Sandbox Code Playgroud)

但是使用GoTo被认为是糟糕的编程,除了 OnError GoTo ...

  • ...这也被认为是糟糕的编程,但我们必须使用,因为语言让你别无选择:-( (4认同)