bien haber si te sirve un poco mi explicación.
ByVal = Por Valor
ByRef = Por Referencia
Por valor es cuando se llama a la función y al pasar este parametro/variable se copia un nuevo espacio en memoria con el mismo valor de la variable que usaste, asi si modificas dicha variable dentro de la función esta no cambiara su valor original.
Por referencia es cuando se llama a la función pero con el mismo puntero de la variable que usaste, asi cuando modificas la variable dentro de la función esta cambiara su valor en la variable original.
Un ejemplo seria:
Private Sub Form_Load()
Dim A As String
A = "Hola!!!"
Call MiFuncionPorValor(A)
MsgBox "El contenido de la variable ahora es: " & A
Call MiFuncionPorReferencia(A)
MsgBox "El contenido de la variable ahora es: " & A
End Sub
Public Function MiFuncionPorValor(ByVal MiVariable As String)
MsgBox "El contenido de la variable es: " & MiVariable, vbInformation
MiVariable = vbNull
End Function
Public Function MiFuncionPorReferencia(ByRef MiVariable As String)
MsgBox "El contenido de la variable es: " & MiVariable, vbInformation
MiVariable = vbNullString
End Function