VB6 pasa por valor y pasa por referencia

Estoy luchando para entender el paso por valor y el paso por referencia en VB6. Entiendo completamente estos conceptos en lenguajes de programación orientados a objetos, como .NET y Java (me doy cuenta de que Java no tiene pases de referencia). Echa un vistazo al siguiente código:

<code>Private Sub Form_Load()

Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox (Test)

End Sub

Private Sub TestFunction(ByVal i As Integer)
    i = i + 1
End Sub
</code>

Cuando coloco corchetes alrededor de Prueba en la línea 5, el cuadro de mensaje se imprime 1 como es de esperar. Ahora echa un vistazo al siguiente código:

<code>Private Sub Form_Load()

Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox Test

End Sub

Private Sub TestFunction(ByRef i As Integer)
    i = i + 1
End Sub
</code>

El cuadro de mensaje imprime 2 como esperaría. Sin embargo, si agrega corchetes a la línea 5, el cuadro de mensaje imprime 1 como no lo esperaría. Parece que la función de llamada puede pasar por valor incluso si la variable definida en la función llamada es ByRef. Parece que no es así viceversa, es decir, si la función llamada tiene una firma con una variable definida como ByVal, siempre será ByVal (incluso si no hay corchetes alrededor de la variable en la función de llamada). ¿Cuál es el pensamiento detrás de esto en VB6? Me doy cuenta de que esta es una pregunta básica en VB6 pero me ha confundido. He leído la documentación de MSDN y me doy cuenta de que todo esto es cierto, sin embargo, no explica el razonamiento detrás de esto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta