Wenn du eine Variable deklarierst ist sie Public. Das heißt du kannst sie auch in der Sub verwenden, ohne sie irgendwie übergeben zu müssen. Wenn du den Wert in der Sub änderst ist er überall verändert. Das hört sich im ersten Moment cool an, jedoch birgt das große Gefahren!

Stell dir vor, im Hauptprogramm steht die Bierkiste und du rufst die Sub auf. Dort wird Code abgearbeitet und dann auf die Variable Bier zugegriffen, jedoch das Bier ist leer! Das gibts doch nicht, beim Aufruf der Sub war die doch noch voll!
Was ist passiert? Inzwischen war der Interrupt da, der ebenfalls vom Bier erfahren hat und hat es leergesoffen.
Soll heißen, du kannst nicht sicher sein, daß andere Programmteile die Variable in der Zwischenzeit nicht verändert haben. Wird der Wert aber byval an die Sub übergeben, kommt der Wert sicher so an der Sub an, wie er im Moment des Subaufrufs war. Beides hat Vorteile, man muß sich aber über die Unterschiede klar werden, sonst baut man sich ganz fiese Fehler ein!