Pero si tu mismo lo dices, utilizas ByVal para pasar un obeto como valor y ByRef para pasarlo como referencia
mira este ejemplo:
Private Sub Form_Load()
I = 3
MsgBox "Valor Inicial de I --> " & I
MsgBox MsnByRef(I) 'Pasandolo como referencia
'MsgBox MsnByVal(I) 'Pasandolo como valor
MsgBox "Valor final de I --> " & I
End Sub
Private Function MsnByRef(ByRef A As Byte) As Byte
A = A + 3
MsnByRef = A
End Function
Private Function MsnByVal(ByVal A As Byte) As Byte
A = A + 3
MsnByVal = A
End Function
Cuando lo pasas como referenca afectas a ese objeto desde la rutina, eso quiere decir, que si I valia 3, será afectada, aumentando su valor. Con ByVal eso NO sucede.
Serás tu de acuerdo a lo que quieras hacer, quien decida cual usar, pero es buena costumbre especificar como se le pasa el parametro a la rutina.