Understanding ByVal in Visual Basic

In Visual Basic and Visual Basic .NET, the keyword ByVal is used to pass arguments to a procedure by value. This means the procedure receives a copy of the variable, not the original variable itself.

What Does ByVal Mean?

When a parameter is passed ByVal:

Example in Classic Visual Basic (VB6)


Private Sub ChangeNumber(ByVal x As Integer)
    x = x + 10
End Sub

Private Sub Command1_Click()
    Dim num As Integer
    num = 5
    Call ChangeNumber(num)
    MsgBox num   ' Shows 5
End Sub
    

The variable num remains 5 because the procedure changed only its local copy.

Example in VB.NET


Sub ChangeText(ByVal message As String)
    message = "Modified inside procedure"
End Sub

Sub Main()
    Dim txt As String = "Original text"
    ChangeText(txt)
    Console.WriteLine(txt)   ' Outputs: Original text
End Sub
    

Again, changing the parameter inside the procedure has no effect on the original variable.

ByVal vs ByRef

Visual Basic also supports ByRef, which passes the argument by reference instead of by value. A ByRef parameter allows a procedure to modify the caller’s variable directly.

Keyword Meaning Can the procedure change the original value?
ByVal Passes a copy of the variable No
ByRef Passes the actual variable Yes

Why Use ByVal?


PeatSoft - VB.NET - Educational Reference - AI