Usando ChatGPT para Escribir Macros VBA de Excel

Primeros Pasos: Tu Primer Macro VBA Generado por IA

ChatGPT puede generar macros VBA completas y funcionales a partir de descripciones en lenguaje sencillo. Para ejecutar un macro, abre Excel, presiona Alt + F11 para abrir el editor VBA, inserta un nuevo módulo (Insertar > Módulo), pega el código y ejecútalo con F5. Tu primer prompt debe ser simple y comprobable — algo como "Escribe un macro VBA que tome el rango seleccionado y cambie el color de fondo a azul claro." Esto verifica que el código generado se ejecuta en tu entorno antes de abordar automatizaciones complejas.

Guarda siempre tu libro como archivo habilitado para macros (.xlsm), no como .xlsx normal. Los libros estándar eliminan todo el código VBA al guardar. Si ves una barra de advertencia de seguridad debajo de la cinta, haz clic en "Habilitar contenido" para permitir que se ejecuten los macros. Para el código generado por ChatGPT, comienza en una copia de prueba de tu libro hasta que tengas confianza en que el macro se comporta como esperas.

Macros de Productividad: Ejemplos Reales que Puedes Usar Hoy

Macro 1: Autoformatear una Tabla de Datos

Prompt: "Escribe un macro VBA que tome la selección actual, ponga en negrita la fila de encabezado, añada bordes inferiores a todas las celdas de datos, autoajuste los anchos de columna y congele la fila superior."

Código generado:

Sub FormatDataTable()
    Dim rng As Range
    Set rng = Selection
    
    ' Formato de fila de encabezado
    With rng.Rows(1)
        .Font.Bold = True
        .Interior.Color = RGB(68, 114, 196)
        .Font.Color = RGB(255, 255, 255)
    End With
    
    ' Añadir bordes a todas las celdas
    With rng.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .Color = RGB(180, 180, 180)
    End With
    
    ' Autoajustar columnas
    rng.EntireColumn.AutoFit
    
    ' Congelar fila superior
    ActiveWindow.SplitRow = 1
    ActiveWindow.FreezePanes = True
    
    MsgBox "¡Tabla formateada con éxito!", vbInformation
End Sub

Este macro es seguro y reversible (usa Ctrl+Z después de ejecutarlo) y demuestra patrones VBA esenciales: objetos Range, bloques With para establecer propiedades de manera eficiente y retroalimentación al usuario mediante MsgBox.

Macro 2: Exportar Cada Hoja como PDF Separado

Prompt: "Escribe un macro VBA que exporte cada hoja del libro activo como un archivo PDF separado, guardado en la misma carpeta que el libro, con nombres de archivo en el formato 'NombreLibro_NombreHoja.pdf'. Omite las hojas ocultas."

Código generado:

Sub ExportSheetsAsPDF()
    Dim ws As Worksheet
    Dim folderPath As String
    Dim pdfName As String
    
    folderPath = ThisWorkbook.Path & "\"
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            pdfName = folderPath & _
                      Replace(ThisWorkbook.Name, ".xlsm", "") & _
                      "_" & ws.Name & ".pdf"
            
            ws.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=pdfName, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True
            
            Debug.Print "Exportado: " & pdfName
        End If
    Next ws
    
    MsgBox "¡Exportación completa! Revisa la Ventana Inmediato (Ctrl+G) para más detalles.", vbInformation
End Sub

Este macro usa ExportAsFixedFormat, el mismo motor que Excel utiliza para Archivo > Guardar como > PDF. Recorre la colección Worksheets, omitiendo hojas ocultas, y construye nombres de archivo dinámicamente mediante concatenación de cadenas. Las instrucciones Debug.Print te permiten verificar la salida en la Ventana Inmediato.

Macro 3: Enviar Correos con Outlook desde Datos de Excel

Prompt: "Escribe un macro VBA que lea direcciones de correo de la columna A (comenzando en A2), asuntos de la columna B y cuerpo del mensaje de la columna C. Para cada fila, envía un correo a través de Outlook. Detente cuando la columna A esté vacía. Añade un retraso de 2 segundos entre envíos."

Código generado:

Sub SendBulkEmails()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim i As Long
    Dim lastRow As Long
    
    On Error Resume Next
    Set OutApp = GetObject(, "Outlook.Application")
    If OutApp Is Nothing Then
        Set OutApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow
        If Cells(i, 1).Value = "" Then Exit For
        
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
            .To = Cells(i, 1).Value
            .Subject = Cells(i, 2).Value
            .Body = Cells(i, 3).Value
            .Send
        End With
        
        Application.Wait Now + TimeValue("00:00:02")
    Next i
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    MsgBox "¡Todos los correos enviados!", vbInformation
End Sub

La línea Application.Wait impone un retraso de 2 segundos entre envíos, lo que ayuda a evitar los límites de velocidad o los filtros de spam de Outlook al enviar correos masivos. El manejo de errores con On Error Resume Next y la verificación Nothing maneja correctamente el caso en que Outlook no está ya en ejecución.

Ingeniería de Prompts para Mejor Código VBA

La calidad del VBA generado por ChatGPT depende en gran medida de cómo formules la solicitud. Usa este enfoque estructurado:

  1. Define el disparador: "Ejecutar al hacer clic en un botón" vs "Ejecutar automáticamente al abrir el libro" vs "Ejecutar sobre el rango seleccionado".
  2. Especifica las ubicaciones de los datos: "La columna A tiene nombres de clientes comenzando en A2, la columna B tiene direcciones de correo."
  3. Describe el resultado exacto: "Para cada fila, crea una nueva hoja con el nombre del cliente y copia sus datos en ella."
  4. Indica requisitos de manejo de errores: "Omite las filas sin dirección de correo en lugar de mostrar un error."
  5. Menciona restricciones: "El libro tiene 50.000 filas, optimiza para velocidad" o "Debe funcionar en Excel 2016 en Windows."

Consejo profesional: Para macros complejos, divide la solicitud en partes más pequeñas. Primero pide la estructura del bucle principal, luego pide cada subrutina por separado. Pide a ChatGPT que añada comentarios mientras escribe; esto facilita enormemente la depuración.

Depuración de Código VBA Generado por IA

Los macros generados por IA rara vez funcionan perfectamente en el primer intento. Aquí tienes un flujo de trabajo de depuración sistemático:

  1. Compila primero: En el editor VBA, ve a Depuración > Compilar VBAProject. Esto detecta errores de sintaxis, variables no declaradas y referencias faltantes antes del tiempo de ejecución.
  2. Añade Option Explicit: Si al código generado le falta Option Explicit al inicio del módulo, añádelo. Esto fuerza la declaración de variables y detecta errores tipográficos en los nombres de variables.
  3. Usa puntos de interrupción: Haz clic en el margen izquierdo junto a una línea para establecer un punto de interrupción, luego presiona F8 para avanzar línea por línea. Pasa el cursor sobre las variables para inspeccionar sus valores actuales.
  4. Añade instrucciones Debug.Print: Inserta Debug.Print "Fila: " & i & " Valor: " & Cells(i,1).Value en puntos estratégicos para rastrear el flujo de ejecución.
  5. Pega los errores de vuelta a ChatGPT: Copia el mensaje de error exacto y el número de línea, luego pregunta "Obtuve 'Error en tiempo de ejecución 1004: Error definido por la aplicación o el objeto' en la línea 12. Aquí está el código completo. ¿Qué lo está causando?" La IA a menudo puede autocorregirse cuando recibe comentarios de error específicos.

Consideraciones de Seguridad para Macros Generados por IA

Los macros VBA tienen acceso completo a tu sistema de archivos, registro y red. Trata el código generado por IA con la misma precaución que el código descargado de internet:

Construyendo un Kit de Herramientas VBA Reutilizable

Guarda tus macros generados por IA más confiables en un Libro de Macros Personal (Personal.xlsb). Este libro oculto se carga cada vez que abres Excel, haciendo que tus macros estén disponibles en todos los libros. Para crearlo, graba cualquier macro simple y elige "Libro de macros personal" como ubicación de almacenamiento. Luego abre el editor VBA, busca VBAProject (PERSONAL.XLSB) y añade módulos que contengan tus macros seleccionados.

Organiza los macros en módulos por función: uno para formato, uno para exportación de datos, uno para automatización de correo electrónico y uno para gestión de hojas. Añade una pestaña de cinta personalizada (Archivo > Opciones > Personalizar cinta) con botones asignados a tus macros más usados para acceso con un solo clic. Con el tiempo, este kit de herramientas reemplaza docenas de pasos manuales y garantiza la coherencia en todos tus proyectos de Excel.

¿Tienes preguntas o encontraste un error en este artículo?