![]() |
||||||
|
|
||||||
Usando variables en VBA
Variables explícitas e implícitasMuchas veces nos encontramos con qué códigos que en un principio tienen que funcionar, no funcionan como esperamos, o simplemente devuelven unos resultados que no son los correctos. Y aunque repasamos cientos de veces el código, compilamos y volvemos a repasar, no encontramos ningún error que nos indique el porqué del fallo. Una situación como la descrita anteriormente se da en el siguiente código. Para ver el resultado, copia el código y pégalo en un módulo de Access, y luego llama a la función desde la ventana Inmediato del editor de VBA.
Option Compare Database
Function FuncionConFallos() strUnTexto = "Hola Pepe" strOtroTexto = "Hola Juan" strResultado = strUnTexto & vbCrLf & strOtoTexto Debug.Print strResultado End Function Al llamar a la función desde la ventana Inmediato, nos aparecerá lo siguiente:
FuncionConFallos
"Hola Pepe" Lo cual, en un principio, no es lógico, ya que usamos 2 variables para almacenar unos textos, y luego el valor de esas 2 variables lo asignamos a una tercera más un sato de línea (constante Entonces, ¿por qué un código tan simple nos falla? Después de revisar el código, y si nos damos cuenta, veremos que en la asignación de la tercera variable nos hemos comido una letra en la variable
Option Compare Database
Function FuncionSinFallos() strUnTexto = "Hola Pepe" strOtroTexto = "Hola Juan" strResultado = strUnTexto & vbCrLf & strOtroTexto Debug.Print strResultado End Function Y la llamamos de nuevo, obtendremos el resultado deseado:
FuncionSinFallos
"Hola Pepe" "Hola Juan" Y por suerte para nosotr@s, esta función era lo suficientemente pequeña para poder encontrar el fallo rápidamente. Pero, ¿qué pasa si la función es más compleja, o hay llamadas a otras funciones, o usos de variables públicas o de objetos de Access? La respuesta es muy sencilla: es una locura encontrar errores de escritura. Para impedir que suceda esto, es preferible que VBA no nos permita este tipo de escritura de código. Y para este propósito existe la instrucción
Option Compare Database
Option Explicit Function FuncionConFallos() strUnTexto = "Hola Pepe" strOtroTexto = "Hola Juan" strResultado = strUnTexto & vbCrLf & strOtoTexto Debug.Print strResultado End Function Si ahora intentamos ejecutar esta función desde la ventana Inmediato, nos encontraremos que VBA nos advierte de que estamos usando variables no declaradas: Error de compilación: Por lo que tenemos que empezar a declarar o dimensionar las variables:
Option Compare Database
Option Explicit Function FuncionConFallos() Dim strUnTexto As String Dim strOtroTexto As String Dim strResultado As String strUnTexto = "Hola Pepe" strOtroTexto = "Hola Juan" strResultado = strUnTexto & vbCrLf & strOtoTexto Debug.Print strResultado End Function Ahora, si volvemos a intentar ejecutar esta función, nos volverá a aparecer el error de compilación, pero si pulsamos el botón Depurar, nos encontraremos que señala la variable El motivo de este tipo de funcionamiento, cuando no usamos la línea Nota: Aunque no lo parezca, Option Explicit puede eliminar muchos problemas y quebraderos de cabeza.
Pero como siempre se nos puede olvidar escribir la instrucción, el editor de VBA dispone de una opción que sirve para que escriba directamente esta instrucción en todos los módulos y clases que creemos, tal y como se ve en la imagen de la izquierda. El problema es que esta opción sólo trabaja con los módulos y clases que creemos a partir de su activación. Para los módulos y clases que ya estén creados, habrá que recorrerlos e insertar esta instrucción a mano. Para poder insertar más rápidamente la línea Nota: Después de usar la función, se recomienda compilar el proyecto de VBA desde el menú Depuración -> Compilar. |
||||||
|
2008 Patxi Sanz Libro de visitas |