![]() |
||||||
|
|
||||||
Usando variables en VBA
Parámetros por valor y por referenciaVeamos 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
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 ¿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 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 |