Pasa Programación, apuntes y soluciones con Access
Página principal Mis apuntes de Access Mis utilidades Mis ejemplos Mis agradecimientos Enlaces a otras Webs

Usando variables en VBA

  1. Índice.
  2. Variables explícitas e implícitas.
  3. Definir los tipos de las variables.
  4. Ámbito y Accesibilidad de las variables.
  5. Parámetros por valor y por referencia.
  6. Variables de objeto.
  7. Bibliografía.

Parámetros por valor y por referencia

Veamos el siguiente código:

Option Compare Database
Option Explicit


'Muestra la diferencia entre pasar una
'variable por valor, y pasarla por referencia
Private Function ValYRef(ByVal UnaVariable As Integer, ByRef OtraVariable As Integer) As Integer
    Dim intResultado As Integer

    'Realizamos operaciones con los parámetros pasados
    UnaVariable = UnaVariable * 10 - 6
    OtraVariable = OtraVariable + 3 * 2

    'Y otras operaciones para devolver un valor
    ValYRef = UnaVariable + OtraVariable
End Function

'Sub de prueba
Sub ProbarValYRef()
    Dim int1 As Integer
    Dim int2 As Integer

    'Damos los valores iniciales
    int1 = 6
    int2 = 5

    'Mostramos esos valores
    Debug.Print "El valor inicial de int1 es " & int1
    Debug.Print "El valor inicial de int2 es " & int2

    'Ejecutamos la función
    Debug.Print "El resultado de la función ValYRef es " & ValYRef(int1, int2)

    'Y vemos los valores finales de las variables
    Debug.Print "El valor final de int1 es " & int1
    Debug.Print "El valor final de int2 es " & int2
End Sub

Si ejecutamos el procedimiento ProbarValYRef desde la ventana Inmediato de VBA, nos devolverá lo siguiente:

ProbarValYRef
El valor inicial de int1 es 6
El valor inicial de int2 es 5
El resultado de la función ValYRef es 65
El valor final de int1 es 6
El valor final de int2 es 11

Que más o menos es el resultado esperado: el procedimiento crea unas variables, le da unos valores, las pasa a una función que realiza una serie de operaciones matemáticas y devuelve el resultado, y el procedimiento muestra ese resultado y cómo han quedado las variables. Y si nos fijamos, la variable int2 ha sido modificada: ha pasado de valer 5 a valer 11. Esto ocurre porque en la función ValYRef hemos definido que el segundo parámetro se pase por referencia ByRef, mientras que el primero se pasa por valor ByVal.

¿Y qué significa esto? Significa que cuando una variable se pasa por valor, se pasa el valor que contiene, pero ninguna referencia a la variable que contiene ese valor. En cambio, cuando se pasa una referencia, se pasa la dirección de memoria donde la variable guarda el valor, en vez del propio valor. Simplificando un poco esto tan enrevesado que me ha quedado, podemos decirlo así: supongamos que tenemos una base de datos que hemos creado, y se la dejamos a otra persona para que la inspeccione, trabaje y/o modifique el archivo. Si le damos la única copia de la base de datos que tenemos, las modificaciones que haga la persona serán modificaciones finales, no podemos dar marcha atrás: esto es como pasar los parámetros por referencia o ByRef. En cambio, si le dejamos una copia y nos guardamos la base de datos original, por muchas cosas raras y modificaciones que haga esa persona, seguimos teniendo la base de datos original; esto es pasar los parámetros por valor o ByVal.

Esto es importante tenerlo claro, ya que al crear nuestras funciones, podemos modificar los valores que guardan los parámetros que se les pasa, y podemos encontrarnos en situaciones en que se cambian los valores iniciales tras cambiar a una función. O puede pasar lo contrario: querer crear una función que reciba unos datos, y realizar una serie de acciones para modificar esos datos y devolver las modificaciones. Y como una función sólo puede devolver un resultado, tal vez nos interese recibir los parámetros por referencia.

Por último, indicar que si no indicamos si queremos recibir los parámetros por valor o por referencia, VBA tiene establecido que se pasen los datos por referencia.

2008 Patxi Sanz
Libro de visitas
Hosted by www.Geocities.ws

1