Visual Basic 6.0 Passing by Value Reference difference

pass-by-referencepass-by-valuevb6

In the following code, I get a compile time error because i is treated as a variant. The error is: "ByRef Argument type mismatch.".

But if I pass the parameters ByVal, there is no error why?

Private Sub Command2_Click()
    Dim i, j As Integer
    i = 5
    j = 7
    Call Swap(i, j)
End Sub

Public Sub Swap(ByRef X As Integer, ByRef Y As Integer)
    Dim tmp As Integer
    tmp = X
    X = Y
    Y = tmp
End Sub

Best Answer

When you Dim several variables on a single line ie Dim i, j as Integer j is dimmed as an integer, but i is a variant. You need to declare each variable type explicitly. I prefer to include only a single variable per line.

Dim i As Integer, j As Integer

or

Dim i As Integer
Dim j As Integer

This is something I learned when I inherited another programmer's code