Statements in Visual Basic

A statement in Visual Basic is a complete instruction. It can contain keywords, operators, variables, constants, and expressions. Each statement belongs to one of the following categories:

  • Declaration Statements, which name a variable, constant, or procedure, and can also specify a data type.

  • Executable Statements, which initiate actions. These statements can call a method or function, and they can loop or branch through blocks of code. Executable statements include Assignment Statements, which assign a value or expression to a variable or constant.

This topic describes each category. Also, this topic describes how to combine multiple statements on a single line and how to continue a statement over multiple lines.

Declaration statements

You use declaration statements to name and define procedures, variables, properties, arrays, and constants. When you declare a programming element, you can also define its data type, access level, and scope. For more information, see Declared Element Characteristics.

The following example contains three declarations.

Public Sub ApplyFormat()
    Const limit As Integer = 33
    Dim thisWidget As New widget
    ' Insert code to implement the procedure.
End Sub

The first declaration is the Sub statement. Together with its matching End Sub statement, it declares a procedure named applyFormat. It also specifies that applyFormat is Public, which means that any code that can refer to it can call it.

The second declaration is the Const statement, which declares the constant limit, specifying the Integer data type and a value of 33.

The third declaration is the Dim statement, which declares the variable thisWidget. The data type is a specific object, namely an object created from the Widget class. You can declare a variable to be of any elementary data type or of any object type that is exposed in the application you are using.

Initial Values

When the code containing a declaration statement runs, Visual Basic reserves the memory required for the declared element. If the element holds a value, Visual Basic initializes it to the default value for its data type. For more information, see "Behavior" in Dim Statement.

You can assign an initial value to a variable as part of its declaration, as the following example illustrates.

Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.

If a variable is an object variable, you can explicitly create an instance of its class when you declare it by using the New Operator keyword, as the following example illustrates.

Dim f As New FileInfo("filename")

Note that the initial value you specify in a declaration statement is not assigned to a variable until execution reaches its declaration statement. Until that time, the variable contains the default value for its data type.

Executable statements

An executable statement performs an action. It can call a procedure, branch to another place in the code, loop through several statements, or evaluate an expression. An assignment statement is a special case of an executable statement.

The following example uses an If...Then...Else control structure to run different blocks of code based on the value of a variable. Within each block of code, a For...Next loop runs a specified number of times.

Public Sub StartWidget(ByVal aWidget As widget,
    ByVal clockwise As Boolean, ByVal revolutions As Integer)
    Dim counter As Integer
    If clockwise = True Then
        For counter = 1 To revolutions
            aWidget.SpinClockwise()
        Next counter
    Else
        For counter = 1 To revolutions
            aWidget.SpinCounterClockwise()
        Next counter
    End If
End Sub

The If statement in the preceding example checks the value of the parameter clockwise. If the value is True, it calls the spinClockwise method of aWidget. If the value is False, it calls the spinCounterClockwise method of aWidget. The If...Then...Else control structure ends with End If.

The For...Next loop within each block calls the appropriate method a number of times equal to the value of the revolutions parameter.

Assignment statements

Assignment statements carry out assignment operations, which consist of taking the value on the right side of the assignment operator (=) and storing it in the element on the left, as in the following example.

v = 42

In the preceding example, the assignment statement stores the literal value 42 in the variable v.

Eligible programming elements

The programming element on the left side of the assignment operator must be able to accept and store a value. This means it must be a variable or property that is not ReadOnly, or it must be an array element. In the context of an assignment statement, such an element is sometimes called an lvalue, for "left value."

The value on the right side of the assignment operator is generated by an expression, which can consist of any combination of literals, constants, variables, properties, array elements, other expressions, or function calls. The following example illustrates this.

x = y + z + FindResult(3)

The preceding example adds the value held in variable y to the value held in variable z, and then adds the value returned by the call to function findResult. The total value of this expression is then stored in variable x.

Data types in assignment statements

In addition to numeric values, the assignment operator can also assign String values, as the following example illustrates.

Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.

You can also assign Boolean values, using either a Boolean literal or a Boolean expression, as the following example illustrates.

Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.

Similarly, you can assign appropriate values to programming elements of the Char, Date, or Object data type. You can also assign an object instance to an element declared to be of the class from which that instance is created.

Compound assignment statements

Compound assignment statements first perform an operation on an expression before assigning it to a programming element. The following example illustrates one of these operators, +=, which increments the value of the variable on the left side of the operator by the value of the expression on the right.

n += 1

The preceding example adds 1 to the value of n, and then stores that new value in n. It is a shorthand equivalent of the following statement:

n = n + 1

A variety of compound assignment operations can be performed using operators of this type. For a list of these operators and more information about them, see Assignment Operators.

The concatenation assignment operator (&=) is useful for adding a string to the end of already existing strings, as the following example illustrates.

Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".

Type Conversions in Assignment Statements

The value you assign to a variable, property, or array element must be of a data type appropriate to that destination element. In general, you should try to generate a value of the same data type as that of the destination element. However, some types can be converted to other types during assignment.

For information on converting between data types, see Type Conversions in Visual Basic. In brief, Visual Basic automatically converts a value of a given type to any other type to which it widens. A widening conversion is one in that always succeeds at run time and does not lose any data. For example, Visual Basic converts an Integer value to Double when appropriate, because Integer widens to Double. For more information, see Widening and Narrowing Conversions.

Narrowing conversions (those that are not widening) carry a risk of failure at run time, or of data loss. You can perform a narrowing conversion explicitly by using a type conversion function, or you can direct the compiler to perform all conversions implicitly by setting Option Strict Off. For more information, see Implicit and Explicit Conversions.

Putting multiple statements on one line

You can have multiple statements on a single line separated by the colon (:) character. The following example illustrates this.

Dim sampleString As String = "Hello World" : MsgBox(sampleString)

Though occasionally convenient, this form of syntax makes your code hard to read and maintain. Thus, it is recommended that you keep one statement to a line.

Continuing a statement over multiple lines

A statement usually fits on one line, but when it is too long, you can continue it onto the next line using a line-continuation sequence, which consists of a space followed by an underscore character (_) followed by a carriage return. In the following example, the MsgBox executable statement is continued over two lines.

Public Sub DemoBox()
    Dim nameVar As String
    nameVar = "John"
    MsgBox("Hello " & nameVar _
        & ". How are you?")
End Sub

Implicit line continuation

In many cases, you can continue a statement on the next consecutive line without using the underscore character (_). The following syntax elements implicitly continue the statement on the next line of code.

  • After a comma (,). For example:

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • After an open parenthesis (() or before a closing parenthesis ()). For example:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • After an open curly brace ({) or before a closing curly brace (}). For example:

    Dim customer = New Customer With {
      .Name = "Terry Adams",
      .Company = "Adventure Works",
      .Email = "terry@www.adventure-works.com"
    }
    

    For more information, see Object Initializers: Named and Anonymous Types or Collection Initializers.

  • After an open embedded expression (<%=) or before the close of an embedded expression (%>) within an XML literal. For example:

    Dim customerXml = <Customer>
                          <Name>
                              <%=
                                  customer.Name
                              %>
                          </Name>
                          <Email>
                              <%=
                                  customer.Email
                              %>
                          </Email>
                      </Customer>
    

    For more information, see Embedded Expressions in XML.

  • After the concatenation operator (&). For example:

    cmd.CommandText = 
        "SELECT * FROM Titles JOIN Publishers " &
        "ON Publishers.PubId = Titles.PubID " &
        "WHERE Publishers.State = 'CA'"
    

    For more information, see Operators Listed by Functionality.

  • After assignment operators (=, &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=). For example:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    For more information, see Operators Listed by Functionality.

  • After binary operators (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) within an expression. For example:

    Dim memoryInUse =
      My.Computer.Info.TotalPhysicalMemory +
      My.Computer.Info.TotalVirtualMemory -
      My.Computer.Info.AvailablePhysicalMemory -
      My.Computer.Info.AvailableVirtualMemory
    

    For more information, see Operators Listed by Functionality.

  • After the Is and IsNot operators. For example:

    If TypeOf inStream Is 
      IO.FileStream AndAlso
      inStream IsNot
      Nothing Then
    
        ReadFile(inStream)
    
    End If
    

    For more information, see Operators Listed by Functionality.

  • After a member qualifier character (.) and before the member name. For example:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    However, you must include a line-continuation character (_) following a member qualifier character when you are using the With statement or supplying values in the initialization list for a type. Consider breaking the line after the assignment operator (for example, =) when you are using With statements or object initialization lists. For example:

    ' Not allowed:
    ' Dim aType = New With { .
    '    PropertyName = "Value"
    
    ' Allowed:
    Dim aType = New With {.PropertyName =
        "Value"}
    
    
    
    Dim log As New EventLog()
    
    ' Not allowed:
    ' With log
    '    .
    '      Source = "Application"
    ' End With
    
    ' Allowed:
    With log
        .Source =
          "Application"
    End With
    

    For more information, see With...End With Statement or Object Initializers: Named and Anonymous Types.

  • After an XML axis property qualifier (. or .@ or ...). However, you must include a line-continuation character (_) when you specify a member qualifier when you are using the With keyword. For example:

    Dim customerName = customerXml.
      <Name>.Value
    
    Dim customerEmail = customerXml...
      <Email>.Value
    

    For more information, see XML Axis Properties.

  • After a less-than sign (<) or before a greater-than sign (>) when you specify an attribute. Also after a greater-than sign (>) when you specify an attribute. However, you must include a line-continuation character (_) when you specify assembly-level or module-level attributes. For example:

    <
    Serializable()
    >
    Public Class Customer
        Public Property Name As String
        Public Property Company As String
        Public Property Email As String
    End Class
    

    For more information, see Attributes overview.

  • Before and after query operators (Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending, and Descending). You cannot break a line between the keywords of query operators that are made up of multiple keywords (Order By, Group Join, Take While, and Skip While). For example:

    Dim vsProcesses = From proc In
                        Process.GetProcesses
                      Where proc.MainWindowTitle.Contains("Visual Studio")
                      Select proc.ProcessName, proc.Id,
                             proc.MainWindowTitle
    

    For more information, see Queries.

  • After the In keyword in a For Each statement. For example:

    For Each p In
      vsProcesses
    
        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}",
          p.ProcessName,
          p.Id,
          p.MainWindowTitle)
    Next
    

    For more information, see For Each...Next Statement.

  • After the From keyword in a collection initializer. For example:

    Dim days = New List(Of String) From
      {
       "Mo", "Tu", "We", "Th", "F", "Sa", "Su"
      }
    

    For more information, see Collection Initializers.

Adding comments

Source code is not always self-explanatory, even to the programmer who wrote it. To help document their code, therefore, most programmers make liberal use of embedded comments. Comments in code can explain a procedure or a particular instruction to anyone reading or working with it later. Visual Basic ignores comments during compilation, and they do not affect the compiled code.

Comment lines begin with an apostrophe (') or REM followed by a space. They can be added anywhere in code, except within a string. To append a comment to a statement, insert an apostrophe or REM after the statement, followed by the comment. Comments can also go on their own separate line. The following example demonstrates these possibilities.

' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.

Checking compilation errors

If, after you type a line of code, the line is displayed with a wavy blue underline (an error message may appear as well), there is a syntax error in the statement. You must find out what is wrong with the statement (by looking in the task list, or hovering over the error with the mouse pointer and reading the error message) and correct it. Until you have fixed all syntax errors in your code, your program will fail to compile correctly.

Term Definition
Assignment Operators Provides links to language reference pages covering assignment operators such as =, *=, and &=.
Operators and Expressions Shows how to combine elements with operators to yield new values.
How to: Break and Combine Statements in Code Shows how to break a single statement into multiple lines and how to place multiple statements on the same line.
How to: Label Statements Shows how to label a line of code.