Al abrir un libro con macros de VBA después de una actualización de Microsoft 365, aparece un mensaje de error de compilación. El error suele señalar una biblioteca faltante, un modelo de objetos modificado o una referencia rota. Este artículo explica por qué las actualizaciones de Microsoft 365 causan errores de compilación de VBA y brinda pasos claros para resolverlos.
Las actualizaciones de Microsoft 365 pueden cambiar la versión del runtime de VBA o dejar de admitir ciertos objetos y métodos. Cuando tu código depende de una versión específica de una biblioteca o utiliza una característica eliminada, Excel no puede compilar la macro. Aprenderás a corregir referencias de bibliotecas, actualizar código obsoleto y evitar que el error vuelva a aparecer.
Puntos clave: Cómo corregir errores de compilación de VBA después de actualizaciones de Microsoft 365
- Herramientas > Referencias en el editor de VBA: Verifica y vuelve a vincular las referencias de bibliotecas rotas que causan errores de compilación.
- Explorador de objetos (F2) en el editor de VBA: Encuentra objetos y métodos obsoletos o renombrados para actualizar tu código.
- Re-registro manual de archivos DLL/OCX mediante el Símbolo del sistema: Restaura controles faltantes como TreeView o ListView después de una actualización.
Por qué las actualizaciones de Microsoft 365 rompen las macros de VBA
Microsoft 365 recibe actualizaciones mensuales de características y seguridad. Estas actualizaciones pueden cambiar el número de versión de las bibliotecas de tipos, como la biblioteca de extensibilidad de Visual Basic para Aplicaciones o la Biblioteca de objetos de Microsoft Office. Cuando tu proyecto de VBA tiene una referencia a una versión específica de una biblioteca que ya no existe después de la actualización, Excel muestra un error de compilación como “No se puede encontrar el proyecto o la biblioteca” o “Tipo definido por el usuario no definido”.
Otra causa es la eliminación de ciertos objetos, métodos o propiedades. Por ejemplo, el objeto FileSearch se eliminó hace años, pero algunas macros heredadas aún lo referencian. Las actualizaciones también pueden cambiar el GUID de una biblioteca, rompiendo la referencia. Finalmente, las actualizaciones de seguridad pueden bloquear o deshabilitar controles ActiveX que tu código VBA utiliza, lo que provoca errores de compilación cuando falta la biblioteca del control.
Mensajes de error comunes después de una actualización
Puedes ver alguno de estos mensajes:
- “Error de compilación: No se puede encontrar el proyecto o la biblioteca”
- “Error de compilación: Tipo definido por el usuario no definido”
- “Error de compilación: Método o miembro de datos no encontrado”
- “Error de compilación: Variable no definida”
- “Error de compilación: Argumento no opcional”
Todos estos apuntan a una referencia faltante o no coincidente.
Pasos para corregir errores de compilación de VBA después de una actualización de Microsoft 365
Sigue estos pasos en orden. Después de cada paso, intenta compilar tu proyecto nuevamente seleccionando Depuración > Compilar VBAProject en el editor de VBA.
Paso 1: Abre el editor de VBA y verifica las referencias
- Abrir el editor de VBA
Presiona Alt + F11 en Excel para abrir el Editor de Visual Basic. - Abrir el cuadro de diálogo Referencias
En el menú del editor de VBA, haz clic en Herramientas > Referencias. - Buscar referencias rotas
Cualquier referencia marcada con “FALTA” está rota. Desmarca esa referencia. - Volver a agregar la referencia correcta
Desplázate por la lista y marca la casilla de la misma biblioteca pero con el número de versión actual. Por ejemplo, si falta “Microsoft Office 16.0 Object Library”, marca “Microsoft Office 16.0 Object Library” si aparece. Si la biblioteca no está en la lista, haz clic en Examinar y localiza el archivo .olb o .dll correcto en C:\Program Files (x86)\Common Files\microsoft shared\OFFICE16 o similar. - Compilar el proyecto
Haz clic en Aceptar y luego, en el menú del editor de VBA, haz clic en Depuración > Compilar VBAProject. Si no aparecen errores, la solución está completa.
Paso 2: Actualiza el código obsoleto
Si las referencias son correctas pero el error de compilación persiste, el código puede estar usando un objeto o método obsoleto. Usa el Explorador de objetos para buscar el identificador problemático.
- Abrir el Explorador de objetos
En el editor de VBA, presiona F2. - Buscar el objeto o método
Escribe el nombre que aparece en el mensaje de error en el cuadro de búsqueda. Si la biblioteca falta o el objeto no existe, el Explorador de objetos no mostrará resultados o mostrará una ubicación diferente. - Reemplazar con el equivalente actual
Por ejemplo, si tu código usaFileSearch, reemplázalo conApplication.FileDialog(msoFileDialogFilePicker). Si usaCommandBars, reemplázalo con el XML de la cinta de opciones oApplication.CommandBarssi aún es compatible. Consulta la documentación de referencia de VBA de Microsoft para conocer la sintaxis actual. - Compilar nuevamente
Depuración > Compilar VBAProject.
Paso 3: Re-registrar controles ActiveX faltantes
Si tu código VBA usa controles ActiveX personalizados como TreeView o ListView, la actualización puede haber desregistrado el DLL del control.
- Cerrar Excel
Guarda todo el trabajo y sal de Excel. - Abrir el Símbolo del sistema como administrador
Presiona la tecla de Windows, escribe cmd, haz clic derecho en Símbolo del sistema y selecciona Ejecutar como administrador. - Re-registrar el control
Escriberegsvr32 "C:\Windows\SysWOW64\mscomctl.ocx"y presiona Enter. Ajusta la ruta si el control está en System32 o en una carpeta diferente. Los controles comunes incluyen mscomctl.ocx (TreeView, ListView) y mscomct2.ocx (DatePicker, MonthView). - Reiniciar Excel y probar
Abre el libro y compila el proyecto de VBA nuevamente.
Paso 4: Restablecer referencias del proyecto VBA mediante programación
Si administras muchos libros, puedes automatizar la corrección de referencias con una pequeña macro. Esta macro elimina todas las referencias rotas y vuelve a agregar la versión actual de las bibliotecas comunes.
- Insertar un nuevo módulo
En el editor de VBA, haz clic en Insertar > Módulo. - Pegar el siguiente código
Sub FixBrokenReferences() Dim vbProj As VBIDE.VBProject Dim ref As Reference Set vbProj = ThisWorkbook.VBProject For Each ref In vbProj.References If ref.IsBroken Then vbProj.References.Remove ref End If Next ref ' Re-add common libraries vbProj.References.AddFromFile _ "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE16\MSO.DLL" vbProj.References.AddFromFile _ "C:\Windows\SysWOW64\stdole2.tlb" MsgBox "Broken references removed and standard libraries re-added." End Sub - Ejecutar la macro
Presiona F5 mientras el cursor está dentro de la macro. Luego compila el proyecto normalmente.
Si Excel aún tiene errores de compilación después de la solución principal
Error de compilación: “Tipo definido por el usuario no definido” en una clase personalizada
Este error ocurre cuando un módulo de clase hace referencia a un tipo de una biblioteca faltante. Abre el módulo de clase y revisa las declaraciones Dim. Si el tipo proviene de una biblioteca como ADODB (ActiveX Data Objects), ve a Herramientas > Referencias y asegúrate de que la versión actual de esa biblioteca esté marcada. Para ADODB, marca “Microsoft ActiveX Data Objects 6.1 Library” (o la versión más reciente).
Error de compilación: “Método o miembro de datos no encontrado” en un objeto conocido
Este error significa que el método o la propiedad se ha eliminado o renombrado en la nueva versión de la biblioteca. Usa el Explorador de objetos para encontrar el nombre correcto. Por ejemplo, en el modelo de objetos de VBA de Excel, la propiedad Range.Phonetics aún existe, pero Range.SpecialCells no ha cambiado. Consulta la documentación de Microsoft para el objeto específico. Si el método realmente ha desaparecido, debes reescribir esa parte de tu código usando un enfoque alternativo.
Error de compilación: “No se puede encontrar el proyecto o la biblioteca” en todos los libros
Si este error aparece en todos los libros que abres, las referencias predeterminadas en la plantilla del proyecto VBA pueden estar rotas. En el editor de VBA, haz clic en Herramientas > Referencias y observa qué bibliotecas están marcadas por defecto. Desmarca las que muestren “FALTA”. Luego, cierra y vuelve a abrir Excel. Si el problema persiste, ejecuta Reparación de Office desde Programas y características en el Panel de control. Elige Reparación rápida primero; si no lo soluciona, ejecuta Reparación en línea.
Reparación rápida vs. Reparación en línea: diferencias clave
| Elemento | Reparación rápida | Reparación en línea |
|---|---|---|
| Descripción | Repara los archivos de Office sin descargar nuevos archivos de instalación | Descarga y reinstala Office desde los servidores de Microsoft |
| Internet requerido | No | Sí |
| Tiempo para completar | 5–10 minutos | 30–60 minutos según la velocidad de conexión |
| Corrige entradas de registro faltantes | Sí | Sí |
| Corrige archivos DLL dañados | Parcial | Completo |
| Afecta a los complementos instalados | No | No |
Después de la primera actualización de Microsoft 365 que cause un error de compilación, puedes prevenir problemas futuros configurando las referencias del proyecto VBA para usar la versión más reciente de la biblioteca y evitando objetos obsoletos. Usa el enlace temprano con la versión actual de la biblioteca de tipos, o cambia al enlace tardío para evitar conflictos de versión por completo. El enlace tardío usa CreateObject y Dim variable As Object, lo que evita las comprobaciones de referencia en tiempo de compilación.
Ahora sabes cómo identificar referencias rotas, actualizar código obsoleto y re-registrar controles faltantes después de una actualización de Microsoft 365. La próxima vez que veas un error de compilación, comienza por revisar Herramientas > Referencias para detectar bibliotecas faltantes. Para una estabilidad a largo plazo, considera convertir tus macros para usar el enlace tardío cuando sea posible. Este enfoque reduce la dependencia de versiones específicas de bibliotecas y previene errores de compilación después de futuras actualizaciones.