Einfach erklärt:
ByVal - der Wert der Variablen wird übergeben, wenn der Wert im Unterprogramm geändert wird, hat das keine Auswirkungen auf das Hauptprogramm

ByRef - die Variable selber bzw. dir Adresse der Variablen wird übergeben, hier haben Änderungen im Unterprogramm auch Auswirkungen auf das Hauptprogramm