Gestión de errores y depuración
Objetivos del capítulo
Durante su proceso de aprendizaje y más allá, tendrá la oportunidad de escribir muchos programas, ¡y de cometer también muchos errores! Esto no es una fatalidad y se puede gestionar muy bien.
Tanto si son culpa suya como de sus usuarios, este capítulo pretende ayudarle a prevenir muchos de esos errores y a adaptarse cuando se produzcan codificando o ejecutando un programa.
Al final del capítulo, se le pedirá que repita algunos de los ejercicios de los capítulos anteriores y que haga su código más robusto utilizando los consejos sugeridos aquí.
Errores en Excel
Es muy común tener errores en las celdas de Excel. En el capítulo Manipular fórmulas ha visto que se pueden producir errores en las fórmulas, pero esta no es la única fuente posible de error en Excel.
Errores en fórmulas
Tanto si el dato que se busca no está presente como si se intenta dividir entre 0, se puede manejar cualquier tipo de error devuelto por la fórmula en una celda, como ya se ha visto con las funciones ESERROR y SI.ERROR.
Cuando Excel identifica un error, aparece un signo de exclamación negro en un triángulo amarillo a la izquierda de la celda:
Excel proporciona un mensaje del error y le sugiere posibles soluciones. De este modo, se puede utilizar la ayuda de Excel para mostrar los pasos de cálculo que conducen a este error, ignorar el error o corregir la fórmula directamente en la barra de fórmulas.
Errores de concepción
Más allá de las soluciones que le ofrece Excel, puede ocurrir que el origen de los problemas venga directamente de los datos con los que esté trabajando. Puede tener errores debido a que los formatos de las celdas no son los correctos, los datos no están donde deberían estar, etc.
Al no poder prever todos los escenarios posibles, se tendrá que adaptar según los casos de error encontrados y enriquecer gradualmente su libro de Excel.
Este enfoque es el mismo que para sus programas...
Errores en VBA
Hay varios tipos de errores en VBA; no todos aparecen por las mismas razones o al mismo tiempo. En esta sección verá sus diferencias, pero también algunas correcciones muy sencillas para solucionar los errores más triviales.
Obtenga ayuda: Option Explicit
Lo primero que se recomienda encarecidamente es utilizar una instrucción que verá en cada una de las correcciones de los ejercicios:
Option Explicit
Ejemplo 1: una instrucción que, más que útil, es esencial
Esta instrucción debe colocarse al principio de sus módulos. Le ayudará a programar mejor.
Agregar la instrucción manualmente
En efecto, la presencia de esta instrucción impone que cada variable utilizada en el código sea declarada estrictamente de antemano. Así, si una variable no está correctamente escrita o si falta su declaración, VBA se lo dirá inmediatamente.
Option Explicit
Sub ProcedimientoLlenoDeErrores()
Dim o As String
B = "B"
End Sub
Ejemplo 2: caso de uso de una variable no declarada
Si comete un error en el nombre de una variable, por ejemplo, si utiliza nombres de variables largos y se olvida de una letra, VBA lo detectará.
Sub OtroProcedimientoLlenoDeErrores()
Dim UnNombreDeVariableParticularmenteLargo As String
UnNombreDeVariableParticularmenteLarg...
Gestionar errores en el código
En esta sección, verá varias herramientas a su disposición para paliar de la mejor manera posible los errores que puedan ocurrir durante el uso de su programa.
Asegurarse de los valores de las variables
Cuando ejecuta su programa, las variables que manipula toman valores y su código se basa en estos valores para ejecutar o no instrucciones. Por lo tanto, es primordial saber qué valores se esperan durante la ejecución.
Mediante el uso de puntos de interrupción (véase el capítulo Ejecutar un programa y reglas de escritura), ya puede estar seguro de si una sentencia debe ejecutarse o no. Pero a veces esto no es suficiente para conocer el estado de sus variables.
Usar el ratón
Ya sea que esté depurando en modo paso a paso o que el programa se haya detenido para usted en un punto de interrupción, es posible ver lo que contiene una variable simplemente colocando el ratón sobre ella. A continuación, se muestra una descripción emergente con el nombre de la variable sobre la que se sitúa el ratón, así como su valor en ese momento del programa:
Esta solución permite una rápida visibilidad del contenido de las variables, pero no siempre es esto posible. Como, por ejemplo, cuando la variable cuyo valor se desea conocer se encuentra mucho más arriba en el programa, o cuando el tipo de variable no es un valor que pueda representarse simplemente con un texto (una hoja o un libro de Excel, por ejemplo). Así que hay que utilizar otros medios.
Usar la ventana Inmediato
Al igual que existe la posibilidad de iniciar una función o un procedimiento desde la ventana Inmediato, el valor de una variable se puede conocer durante la ejecución de un programa, desde esta ventana.
Para ello, basta con escribir el nombre de la variable precedido del carácter de interrogación ?. El contenido de la variable se mostrará en la siguiente línea en la ventana Inmediato:
Este enfoque permite alejarse de la técnica anterior con el puntero del ratón, pero no resuelve el problema mencionado en la sección anterior, es decir, la representación de objetos más complejos y su contenido.
Afortunadamente, aún existe una última solución para acceder a la información de sus variables: las expresiones...
Gestionar errores en los formularios de usuarios
Después de haber visto los principales medios para protegerse contra los errores en tiempo de ejecución, esta última sección le da algunas ideas sobre cómo asegurarse lo antes posible de que sus usuarios están proporcionando lo que usted espera de ellos cuando rellenan un formulario.
De este modo, la gestión de errores puede realizarse tan pronto como se haga clic en un botón en un formulario de usuario.
Validar datos
Antes de llamar a determinadas funciones, puede realizar una serie de pruebas en los controles de sus formularios. Las comprobaciones de coherencia, campos de texto correctamente rellenados y valores válidos son unas de tantas otras cosas que tendrá que validar antes de llamar a los procedimientos.
Puede crear una función Validar, de tipo Boolean, que realizará las comprobaciones y devolverá el valor True solo si todas sus pruebas proporcionan los resultados esperados.
Function Validar() As Boolean
Validar = True
'Instrucciones para validar los controles
...
'en caso de que falle la validación del control
Validar = False
End Function
Ejemplo 13: usar una función de validación
A continuación, puede utilizar esta función directamente al hacer clic...
Ejercicios
Cree el módulo Capitulo_20_Errores para escribir sus programas.
Reforzar los ejercicios precedentes
En un esfuerzo por hacer más robustos los ejercicios de los capítulos precedentes, he aquí algunas ideas.
Capítulo 5 MsgBox Inputbox Ejercicio DialogoBasico: asegúrese de que el usuario no introduzca un valor numérico ni una fecha.
Capítulo 11 Cadenas de Caracteres Ejercicio DescomponerUnaFecha: asegúrese de que los caracteres pasados como parámetros se puedan recuperar como una fecha válida.
Implementar una gestión de errores
Capítulo 14 Manipular Hojas de Excel Ejercicio CrearRellenarYNombrarHoja: implemente un sistema de gestión de errores que muestre un mensaje al usuario si la hoja ya está presente en el libro.
Usar las funciones de control
Capítulo 15 Manipular Libros Ejercicio EtapasCompletasLibro: use las funciones vistas en este capítulo para asegurarse de que la celda utilizada para almacenar el nombre del archivo no está vacía, antes de proceder a guardar el libro.