cuando se que tengo que declarar una variable Long o Byte?
Integer es unicamente para enteros (1,3,etc) ; Long cuando trabajes con numeros "grandes" de preferencia aunque sirve tambien para numeros con punto flotante no muy "grandes" pero reservas memoria inecesaria...
que hace el ByVal
Como recien comienzas uno de los uso más practicos es a la hora de declarar tus propias funciones, y quieres pasar parametros a la función:
NombreDeLaFuncion(ByVal Parametro as String)
pero sigue leyendo y ya se te aclararan las dudas...
Salu2