I can certainly see why MS have switched to ByVal as a default. ByVal is more efficient (although it seems counterintuitive as a copy of the variable is produced rather than a pointer to the initial one). ByVal is also generally safer as you cannot inadvertently alter the value of your initial value. ByVal as a default also makes VB more consistent with C++.
In VB6 if you do not specify ByVal or ByRef does not necessarily mean the arguments will always be passed ByRef. If memory serves it depends on the syntax you use to call the routine:
Call MySub(MyName, MyAge)
is different to:
MySub MyName, MyAge
So explicitly specifying ByVal or ByRef also means that, if different developers use your code, the arguments will *always* be passed in the same manner. Personally I always use ByRef unless I have a good reason not to.
Ed Metcalfe.
Please do not feed the trolls.....