ByRef y ByVal en VBScript

Estoy enfrentando algo raro en VBScript. Cuando escribo un procedimiento en el que quiero que el parámetro se pase por referencia, la forma de llamar a este procedimiento cambia la forma en que se pasa el parámetro.

Aquí hay un ejemplo :

Sub IncrementByRef(ByRef Value)
   Value = Value + 1
End Sub

Sub IncrementByVal(ByVal Value)
   Value = Value + 1
End Sub

Dim Num
Num = 10
WScript.Echo "Num : " & Num
IncrementByRef(Num) : WScript.Echo "IncrementByRef(Num) : " & Num
IncrementByRef Num  : WScript.Echo "IncrementByRef Num : " & Num
IncrementByVal(Num) : WScript.Echo "IncrementByVal(Num) : " & Num
IncrementByVal Num  : WScript.Echo "IncrementByVal Num : " & Num

Y aquí está la salida:

U:\>cscript //nologo byrefbyval.vbs
Num : 10
IncrementByRef(Num) : 10
IncrementByRef Num : 11
IncrementByVal(Num) : 11
IncrementByVal Num : 11

U:\>

Cuando se especifican los parámetros que ByVal pasa, funciona como se espera, sin importar la forma en que se llame al procedimiento. Pero al especificar ByRef para pasar los parámetros, funcionará como se espera si se llama al procedimiento de esta manera:

IncrementByRef Num

pero no de esta manera

IncrementByRef(Num)

Esto me parece raro. ¿Hay alguna manera de asegurarse de que ByRef pase los parámetros, sin importar cómo se llame el procedimiento?

Respuestas a la pregunta(6)

Su respuesta a la pregunta