GoTo Statement


Updated: July 20, 2015

For the latest documentation on Visual Studio 2017, see Visual Studio 2017 Documentation.

Branches unconditionally to a specified line in a procedure.

GoTo line  

Required. Any line label.

The GoTo statement can branch only to lines in the procedure in which it appears. The line must have a line label that GoTo can refer to. For more information, see How to: Label Statements.

System_CAPS_ICON_note.jpg Note

GoTo statements can make code difficult to read and maintain. Whenever possible, use a control structure instead. For more information, see Control Flow.

You cannot use a GoTo statement to branch from outside a For...Next, For Each...Next, SyncLock...End SyncLock, Try...Catch...Finally, With...End With, or Using...End Using construction to a label inside.

Within a Try...Catch...Finally construction, the following rules apply to branching with the GoTo statement.

Block or regionBranching in from outsideBranching out from inside
Try blockOnly from a Catch block of the same construction 1Only to outside the whole construction
Catch blockNever allowedOnly to outside the whole construction, or to the Try block of the same construction 1
Finally blockNever allowedNever allowed

1 If one Try...Catch...Finally construction is nested within another, a Catch block can branch into the Try block at its own nesting level, but not into any other Try block. A nested Try...Catch...Finally construction must be contained completely in a Try or Catch block of the construction within which it is nested.

The following illustration shows one Try construction nested within another. Various branches among the blocks of the two constructions are indicated as valid or invalid.

Graphic diagram of branching in Try constructions
Valid and invalid branches in Try constructions

The following example uses the GoTo statement to branch to line labels in a procedure.

    Sub gotoStatementDemo()
        Dim number As Integer = 1
        Dim sampleString As String
        ' Evaluate number and branch to appropriate label.
        If number = 1 Then GoTo Line1 Else GoTo Line2
        sampleString = "Number equals 1"
        GoTo LastLine
        ' The following statement never gets executed because number = 1.
        sampleString = "Number equals 2"
        ' Write "Number equals 1" in the Debug window.
    End Sub

Do...Loop Statement
For...Next Statement
For Each...Next Statement
If...Then...Else Statement
Select...Case Statement
Try...Catch...Finally Statement
While...End While Statement
With...End With Statement