Sub Statement (Visual Basic)

Declares the name, parameters, and code that define a Sub procedure.

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] 
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Sub ]
    [ statements ]
End Sub

Parts

Term

Definition

attributelist

Optional. See Attribute List.

Partial

Optional. Indicates definition of a partial method. See Partial Methods (Visual Basic).

accessmodifier

Optional. Can be one of the following:

See Access Levels in Visual Basic.

proceduremodifiers

Optional. Can be one of the following:

Shared

Optional. See Shared.

Shadows

Optional. See Shadows.

name

Required. Name of the procedure. See Declared Element Names (Visual Basic). To create a constructor procedure for a class, set the name of a Sub procedure to the New keyword. For more information, see Object Lifetime: How Objects Are Created and Destroyed (Visual Basic).

typeparamlist

Optional. List of type parameters for a generic procedure. See Type List.

parameterlist

Optional. List of local variable names representing the parameters of this procedure. See Parameter List (Visual Basic).

Implements

Optional. Indicates that this procedure implements one or more Sub procedures, each one defined in an interface implemented by this procedure's containing class or structure. See Implements Statement.

implementslist

Required if Implements is supplied. List of Sub procedures being implemented.

implementedprocedure [ , implementedprocedure ... ]

Each implementedprocedure has the following syntax and parts:

interface.definedname

PartDescription
interface Required. Name of an interface implemented by this procedure's containing class or structure.
definedname Required. Name by which the procedure is defined in interface.

Handles

Optional. Indicates that this procedure can handle one or more specific events. See Handles Clause (Visual Basic).

eventlist

Required if Handles is supplied. List of events this procedure handles.

eventspecifier [ , eventspecifier ... ]

Each eventspecifier has the following syntax and parts:

eventvariable.event

PartDescription
eventvariable Required. Object variable declared with the data type of the class or structure that raises the event.
event Required. Name of the event this procedure handles.

statements

Optional. Block of statements to run within this procedure.

End Sub

Terminates the definition of this procedure.

Remarks

All executable code must be inside a procedure. Use a Sub procedure when you don't want to return a value to the calling code. Use a Function procedure when you want to return a value.

Defining a Sub Procedure

You can define a Sub procedure only at the module level. The declaration context for a sub procedure must, therefore, be a class, a structure, a module, or an interface and can't be a source file, a namespace, a procedure, or a block. For more information, see Declaration Contexts and Default Access Levels (Visual Basic).

Sub procedures default to public access. You can adjust their access levels by using the access modifiers.

If the procedure uses the Implements keyword, the containing class or structure must have an Implements statement that immediately follows its Class or Structure statement. The Implements statement must include each interface that's specified in implementslist. However, the name by which an interface defines the Sub (in definedname) doesn't have to match the name of this procedure (in name).

Returning from a Sub Procedure

When a Sub procedure returns to the calling code, execution continues with the statement after the statement that called it.

The following example shows a return from a Sub procedure.

Sub mySub(ByVal q As String)
    Return
End Sub 

The Exit Sub and Return statements cause an immediate exit from a Sub procedure. Any number of Exit Sub and Return statements can appear anywhere in the procedure, and you can mix Exit Sub and Return statements.

Calling a Sub Procedure

You call a Sub procedure by using the procedure name in a statement and then following that name with its argument list in parentheses. You can omit the parentheses only if you don't supply any arguments. However, your code is more readable if you always include the parentheses.

A Sub procedure and a Function procedure can have parameters and perform a series of statements. However, a Function procedure returns a value, and a Sub procedure doesn't. Therefore, you can't use a Sub procedure in an expression.

You can use the Call keyword when you call a Sub procedure, but that keyword isn't recommended for most uses. For more information, see Call Statement (Visual Basic).

Visual Basic sometimes rearranges arithmetic expressions to increase internal efficiency. For that reason, if your argument list includes expressions that call other procedures, you shouldn't assume that those expressions will be called in a particular order.

Example

The following example uses the Sub statement to define the name, parameters, and code that form the body of a Sub procedure.

Sub computeArea(ByVal length As Double, ByVal width As Double)
    ' Declare local variable.
    Dim area As Double
    If length = 0 Or width = 0 Then
        ' If either argument = 0 then exit Sub immediately.
        Exit Sub
    End If
    ' Calculate area of rectangle.
    area = length * width
    ' Print area to Immediate window.
    Debug.WriteLine(area)
End Sub

See Also

Tasks

How to: Use a Generic Class (Visual Basic)

Troubleshooting Procedures (Visual Basic)

How to: Create a Partial Method (Visual Basic)

Reference

Implements Statement

Function Statement (Visual Basic)

Parameter List (Visual Basic)

Dim Statement (Visual Basic)

Call Statement (Visual Basic)

Of Clause (Visual Basic)

Concepts

Sub Procedures (Visual Basic)

Parameter Arrays (Visual Basic)

Partial Methods (Visual Basic)

Change History

Date

History

Reason

August 2012

Reorganized the remarks.

Information enhancement.

May 2012

Revised information about the Call keyword.

Information enhancement.