¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Macros y lenguaje VBA
  3. Gestión de errores y depuración
Extrait - Macros y lenguaje VBA Descubra la programación en Excel (nueva edición)
Extractos del libro
Macros y lenguaje VBA Descubra la programación en Excel (nueva edición) Volver a la página de compra del libro

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:

images/cap20_img_01.png

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 
   A = "A" 
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:

images/cap20_img_08.png

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

images/cap20_img_09.png

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 Ejercicio 2A: asegúrese de que el usuario no introduzca un valor numérico ni una fecha.

 Capítulo 11 Ejercicio 2B: 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 Ejercicio 2: 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 Ejercicio 2B: 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.