Depurar errores en VBA significa usar las herramientas del Editor de VBE para encontrar y corregir fallas en tu código, mientras que protegerlo con contraseña evita que otros lo modifiquen sin autorización.
Los tres tipos de errores en VBA
Antes de depurar, necesitas identificar qué tipo de error tienes. En VBA existen tres categorías principales.
Error de sintaxis ocurre cuando escribes una instrucción incorrecta. El editor la subraya en rojo de inmediato.
Error de ejecución ocurre durante la ejecución de la macro. Por ejemplo, intentar abrir un archivo que no existe.
Error lógico es el más difícil de detectar. El código corre sin interrupciones, pero produce resultados incorrectos.
| Tipo de error | Cuándo aparece | Ejemplo común |
|---|---|---|
| Sintaxis | Al escribir el código | For i = 1 To (sin valor final) |
| Ejecución | Al correr la macro | Dividir entre cero |
| Lógico | Siempre corre, pero falla | Sumar columna equivocada |
El depurador del Editor de VBE
El Editor de VBE incluye herramientas de depuración que te permiten pausar el código y revisarlo línea por línea.
Accedes al depurador desde el menú Depurar (Debug) dentro del Editor de VBE. Las herramientas más útiles son:
- Punto de interrupción (Breakpoint): pausa la ejecución en una línea específica.
- Paso a paso (F8): ejecuta una línea a la vez.
- Ventana Inmediato (Immediate Window): imprime valores en tiempo real.
- Ventana Locales: muestra el valor de todas las variables activas.
Cómo poner un Breakpoint
Haz clic en el margen gris a la izquierda de la línea donde quieres pausar. Aparece un círculo rojo. Cuando ejecutas la macro, el código se detiene ahí y puedes inspeccionar las variables.
Para quitar el breakpoint, haz clic en el mismo círculo rojo.
Ejemplo 1: Depurar un error de ejecución
Imagina que tienes esta macro para calcular el bono mensual de los vendedores de Liverpool:
Sub CalcularBono()
Dim ventas As Double
Dim bono As Double
Dim porcentaje As Double
ventas = Cells(2, 2).Value
porcentaje = Cells(2, 3).Value
bono = ventas / porcentaje
MsgBox "Bono: $" & Format(bono, "#,##0")
End Sub
Si la celda C2 contiene cero, la macro genera un error de ejecución por división entre cero. Para depurarlo:
- Coloca un breakpoint en la línea
bono = ventas / porcentaje. - Ejecuta la macro con F5.
- Cuando el código se pause, abre la Ventana Inmediato con
Ctrl + G. - Escribe
? porcentajey presiona Enter. Verás el valor actual.
Si el valor es cero, ya sabes la causa. Corriges con una validación:
If porcentaje = 0 Then
MsgBox "El porcentaje no puede ser cero."
Exit Sub
End If
bono = ventas / porcentaje
Ejemplo 2: Usar la Ventana Inmediato para inspeccionar valores
La Ventana Inmediato es muy útil durante la depuración. También puedes insertar líneas Debug.Print dentro de tu código para registrar valores mientras corre la macro.
Este ejemplo registra el avance de una macro que procesa pedidos de FEMSA:
Sub ProcesarPedidos()
Dim i As Integer
Dim total As Double
For i = 2 To 100
If Cells(i, 1).Value = "" Then Exit For
total = total + Cells(i, 4).Value
Debug.Print "Fila " & i & " | Acumulado: $" & Format(total, "#,##0")
Next i
MsgBox "Total procesado: $" & Format(total, "#,##0")
End Sub
En la Ventana Inmediato verás una salida como esta:
Fila 2 | Acumulado: $18,500
Fila 3 | Acumulado: $35,200
Fila 4 | Acumulado: $51,750
Esto te permite detectar en qué fila el valor acumulado deja de ser correcto, sin detener el código cada vez.
Manejo de errores con On Error
Además de depurar, debes escribir código que maneje errores de forma controlada. La instrucción On Error evita que la macro se detenga abruptamente.
Sintaxis básica
On Error GoTo NombreEtiqueta
' ... código que puede fallar ...
Exit Sub
NombreEtiqueta:
MsgBox "Ocurrió un error: " & Err.Description
Ejemplo aplicado: Abrir un archivo de Bimbo
Sub AbrirReporte()
On Error GoTo ErrorArchivo
Dim ruta As String
ruta = ThisWorkbook.Path & "\Reporte_Bimbo.xlsx"
Workbooks.Open ruta
MsgBox "Archivo abierto correctamente."
Exit Sub
ErrorArchivo:
MsgBox "No se encontró el archivo. Verifica la ruta: " & ruta
End Sub
Si el archivo no existe, el usuario ve un mensaje claro en lugar de un error técnico de VBA.
También puedes usar On Error Resume Next para ignorar errores y continuar. Úsalo solo en situaciones muy controladas, no de forma general.
Errores comunes al depurar
Error 1: Dejar breakpoints activos en producción. Si olvidas quitar los breakpoints, la macro se pausará cada vez que la ejecute otro usuario. Antes de entregar tu archivo, elimina todos con el menú Depurar > Borrar todos los puntos de interrupción.
Error 2: Usar On Error Resume Next sin límite.
Esta instrucción silencia todos los errores siguientes. Si la colocas al inicio de una subrutina larga, puedes ocultar errores graves sin darte cuenta. Actívala solo para la línea que necesitas y luego desactívala con On Error GoTo 0.
Error 3: No limpiar Debug.Print antes de entregar.
Durante el desarrollo, Debug.Print es tu aliado. Pero en un archivo de producción para Mercado Libre o cualquier cliente, esas líneas generan ruido innecesario. Elimínalas o coméntalas antes de entregar.
Proteger tu código VBA con contraseña
Proteger el proyecto VBA evita que otros usuarios vean, copien o modifiquen tu código sin permiso.
Estos son los pasos:
- Abre el Editor de VBE con
Alt + F11. - En el menú superior, ve a Herramientas > Propiedades de VBAProject.
- Selecciona la pestaña Protección.
- Activa la casilla Bloquear proyecto para visualización.
- Escribe una contraseña en los dos campos y haz clic en Aceptar.
- Guarda el archivo en formato
.xlsmo.xlam.
A partir de ese momento, al intentar abrir el Editor de VBE en ese archivo, el sistema pedirá la contraseña.
Recomendaciones para la contraseña
- Usa al menos 12 caracteres con letras, números y símbolos.
- No uses el nombre del proyecto ni fechas obvias.
- Guarda la contraseña en un gestor seguro. Si la pierdes, no podrás recuperar el código.
Buenas prácticas para proyectos reales
Esta es la lección final del curso. Aquí tienes las prácticas que marcan la diferencia en proyectos profesionales.
Organiza tu proyecto desde el inicio. Separa el código en módulos por función: uno para importar datos, otro para procesar, otro para exportar. Esto facilita la depuración y el mantenimiento.
Usa nombres de variables descriptivos. totalVentasMensual es mejor que t o var1. En proyectos para empresas como FEMSA o Bimbo, otros desarrolladores leerán tu código.
Documenta con comentarios breves. Un comentario por bloque de lógica es suficiente. No comentes lo obvio, comenta el porqué.
Valida los datos de entrada. Antes de procesar, verifica que las celdas no estén vacías, que los valores sean numéricos y que los rangos existan. Esto previene el 80% de los errores en producción.
Prueba en un archivo de copia. Nunca pruebes macros nuevas directamente en el archivo de producción. Usa una copia con datos reales pero sin riesgo.
Controla las versiones. Nombra tus módulos con fecha al exportarlos, igual que aprendiste con los reportes en la lección anterior: Modulo_Ventas_2024-06.bas.
Lo que aprendiste en este curso
A lo largo de estas diez lecciones construiste una base sólida en macros y VBA avanzado. Pasaste de grabar macros simples a automatizar flujos completos: desde importar datos, limpiarlos y procesarlos, hasta generar reportes con formatos profesionales y exportarlos a PDF o CSV.
Aprendiste a interactuar con el usuario mediante formularios y cuadros de diálogo. Trabajaste con tablas dinámicas, gráficas y múltiples hojas desde código. Y ahora sabes cómo mantener ese código limpio, libre de errores y protegido.
El siguiente paso es aplicar todo esto en un proyecto real. Elige un proceso repetitivo en tu trabajo, ya sea en contabilidad, ventas, logística o recursos humanos, y automatízalo. La práctica constante es lo que convierte el conocimiento en habilidad.