Hola... Estas mezclando un poco los conceptos..
A ver...
Tipo de Datos habla de datos de tipo INTEGER, DECIMAL (Long no existe en .NET y Currency Tampoco), STRING, BOOLEAN, etc, etc.
Cuando tu mencionas
ByVal o
ByRef, te estas refiriendo a los 2 tipos de Parámetros que puedes pasar a una Funcion o a un Sub.
Ejemplo...
Código:
Public Sub MiRutina(ByVal a as string, ByRef b as boolean)
End Sub
Es muy facil... cuando tu llamas al Sub le deberás paras 2 parámetros..(Siguiendo el ejemplo anterior) del cual del primer parámetro solo pasarás el valor y del segundo solo pasarás la dirección de memoria donde se aloja la variable original.
Esto permitirá que cada modificación que hagas en el parámetro
b realmente modifique tu valor original.
Pero como un ejemplo vale mucho mas que mil teorias... aqui va...
Primero crearemos un Sub de Ejemplo...
Código:
Public Sub JuegoConParametros(ByVal par1 as string, ByRef par2 as String)
Par1=Par1 & "pepe"
Par2=Par2 & "Jose"
End Sub Muy bien... ya tenemos nuestra Rutina que recibe 2 parametros e internamente les concatena un nombre...
Ahora vamos por nuestra rutina que llama a
JuegoConParametros Código:
Public Sub MiRutina()
Dim texto1, texto2 as String
Texto1="Hola "
Texto2="Hola "
JuegoConParametros(Texto1, Texto2)
messagebox.show("Ahora Texto1 contiene "&texto1)
messagebox.show("Ahora Texto2 contiene "&texto2)
End Sub Si ejecutas este codigo veras como Texto1 contiene "Hola " y Texto2 contiene "Hola Jose"
Porque hizo esto ? porque al pasar a Texto1 como ByVal solo has pasado su valor "Hola " pero en el caso de Texto2 has pasado su referencia.. o sea... no has pasado su valor.. sino un puntero hacia la variable original, lo que hace que cualquier modificación que se realice en ese parámetro estará afectando a la variable u objeto original que haz pasado por parámetro.
Espero que hayas logrado comprender la diferencia entre ByVal y ByRef.
Mucha Suerte