certmundo.
es‑mx

6 min de lectura

¿Cómo depurar errores y proteger tu código VBA?

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:

  1. Coloca un breakpoint en la línea bono = ventas / porcentaje.
  2. Ejecuta la macro con F5.
  3. Cuando el código se pause, abre la Ventana Inmediato con Ctrl + G.
  4. Escribe ? porcentaje y 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:

  1. Abre el Editor de VBE con Alt + F11.
  2. En el menú superior, ve a Herramientas > Propiedades de VBAProject.
  3. Selecciona la pestaña Protección.
  4. Activa la casilla Bloquear proyecto para visualización.
  5. Escribe una contraseña en los dos campos y haz clic en Aceptar.
  6. Guarda el archivo en formato .xlsm o .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.

Puntos clave

  • Usa **breakpoints** y la tecla **F8** para ejecutar tu código línea por línea e identificar exactamente dónde ocurre un error de ejecución o lógico.
  • Inserta `Debug.Print` en puntos clave de tu código para registrar valores en la Ventana Inmediato durante la depuración, y elimínalos antes de entregar el archivo a producción.
  • Usa `On Error GoTo NombreEtiqueta` para capturar errores de ejecución y mostrar mensajes claros al usuario en lugar de mensajes técnicos de VBA.
  • Protege tu proyecto VBA con contraseña desde **Herramientas > Propiedades de VBAProject > Protección** para evitar que terceros vean o modifiquen tu código.
  • En proyectos reales, organiza el código en módulos por función, valida los datos de entrada, documenta con comentarios breves y siempre prueba en una copia del archivo antes de ejecutar en producción.

Comparte esta lección:

¿Cómo depurar errores y proteger tu código VBA? | Macros y VBA en Excel: Curso Avanzado | Certmundo