Corregir el error de compilación de VBA en Word ‘sub or function not defined’ en un proyecto migrado
🔍 WiseChecker

Corregir el error de compilación de VBA en Word ‘sub or function not defined’ en un proyecto migrado

Usted ve el error de compilación de VBA en Word “Sub or Function Not Defined” después de mover un proyecto de macros de una computadora a otra o desde una versión anterior de Office. Este error significa que el editor de Visual Basic para Aplicaciones no puede localizar un procedimiento que su código llama. La causa raíz es casi siempre una referencia faltante o una ruta de biblioteca rota que era válida en el sistema de origen pero no en el sistema de destino. Este artículo explica cómo identificar la referencia faltante, reparar el proyecto y prevenir que el error ocurra en futuras migraciones.

Puntos clave: Cómo corregir el error de compilación de VBA después de la migración del proyecto

  • Herramientas > Referencias en el editor de VBA: Muestra todas las referencias de biblioteca activas; una referencia faltante muestra “MISSING” en el diálogo y es la causa habitual del error.
  • Enlace temprano vs. enlace tardío: Cambiar de enlace temprano (referencia de biblioteca específica) a enlace tardío (CreateObject) elimina la dependencia de una versión específica de la biblioteca.
  • Exportar y reimportar módulos: Elimina los metadatos corruptos del proyecto que pueden causar fallos de resolución de referencias después de la migración.

ADVERTISEMENT

Por qué ocurre el error “Sub or Function Not Defined” después de la migración

Cuando usted escribe código VBA que llama a una función o sub de una biblioteca externa — por ejemplo, Excel.Application, MSForms.UserForm, o Scripting.FileSystemObject — Word almacena una referencia a esa biblioteca. Esta referencia incluye un GUID y un número de versión. En la máquina de origen, la biblioteca está presente. En la máquina de destino, la biblioteca puede ser una versión diferente, un paquete de idioma diferente, o faltar por completo. El editor de VBA no puede resolver la referencia, por lo que marca cada llamada a esa biblioteca como no definida.

Una segunda causa común es una referencia corrupta o huérfana que sobrevivió a la migración. Cuando usted copia un archivo .dotm o .docm, el proyecto VBA incrustado lleva consigo su tabla de referencias. Si el sistema de destino tiene una edición diferente de Office — por ejemplo, 64 bits vs. 32 bits — las rutas de las bibliotecas cambian y las referencias se rompen.

El papel del enlace temprano en los fallos de migración

El enlace temprano significa que su código declara variables de objeto con un tipo específico, como Dim xlApp As Excel.Application. Esto requiere una referencia a la biblioteca de objetos de Excel. Si la máquina de destino no tiene Excel instalado, o si la versión de la biblioteca difiere, la compilación falla. El enlace tardío utiliza Dim xlApp As Object y CreateObject("Excel.Application"), que se resuelve en tiempo de ejecución y no requiere una referencia en tiempo de compilación.

Pasos para identificar y corregir la referencia faltante

Siga estos pasos en orden. Deténgase después de cada paso si el error ya no aparece.

Paso 1: Abra el editor de VBA y revise las referencias

  1. Abra el editor de VBA
    Presione Alt+F11 en Word. Se abre la ventana del editor de VBA.
  2. Abra el diálogo de Referencias
    En el menú del editor de VBA, seleccione Herramientas > Referencias. El diálogo de Referencias lista todas las bibliotecas activas.
  3. Encuentre la referencia faltante
    Desplácese por la lista. Una referencia faltante muestra la palabra “MISSING” al inicio de su entrada. La casilla de verificación sigue marcada. Desmarque esa entrada y haga clic en Aceptar.
  4. Pruebe el proyecto
    Presione F5 para ejecutar la macro. Si el error ha desaparecido, la referencia faltante era la causa. Si el error persiste, continúe con el Paso 2.

Paso 2: Vuelva a agregar la referencia de biblioteca correcta

  1. Abra el diálogo de Referencias nuevamente
    Presione Alt+F11 y seleccione Herramientas > Referencias.
  2. Localice la biblioteca correcta
    Encuentre la biblioteca que acaba de desmarcar. Por ejemplo, “Microsoft Excel 16.0 Object Library” o “Microsoft Scripting Runtime.” Marque su casilla.
  3. Verifique la ruta del archivo
    Con la biblioteca seleccionada, observe el campo Ubicación en la parte inferior del diálogo. La ruta debe apuntar a un archivo que exista en el sistema de destino. Si la ruta está rota, navegue hasta el archivo correcto usando el botón Examinar.
  4. Haga clic en Aceptar y compile
    Haga clic en Aceptar. En el editor de VBA, seleccione Depurar > Compilar VBAProject. Si no aparecen errores, la corrección está completa.

Paso 3: Convierta el código de enlace temprano a enlace tardío

Si la referencia faltante es a una biblioteca que no está instalada en el sistema de destino — por ejemplo, Excel en una máquina que solo tiene Word — convierta el código relevante a enlace tardío. Esta es la solución más confiable a largo plazo para proyectos migrados.

  1. Identifique las declaraciones de enlace temprano
    En el editor de VBA, busque palabras clave As seguidas de un tipo de biblioteca, como As Excel.Application o As Scripting.FileSystemObject. Estas son declaraciones de enlace temprano.
  2. Reemplace con tipo Object
    Cambie Dim xlApp As Excel.Application a Dim xlApp As Object.
  3. Reemplace la palabra clave New con CreateObject
    Cambie Set xlApp = New Excel.Application a Set xlApp = CreateObject("Excel.Application").
  4. Elimine la referencia de biblioteca
    Abra Herramientas > Referencias y desmarque la biblioteca que ya no necesita. Compile el proyecto con Depurar > Compilar VBAProject. El error debería desaparecer.

Paso 4: Exporte y reimporte todos los módulos

Si el error persiste a pesar de las referencias correctas, el proyecto VBA en sí puede contener metadatos corruptos. Exportar y reimportar módulos reconstruye el archivo del proyecto.

  1. Exporte cada módulo
    En el panel Explorador de proyectos, haga clic derecho en un módulo y seleccione Exportar archivo. Guarde el archivo .bas en una carpeta. Repita para cada módulo, módulo de clase y formulario de usuario.
  2. Elimine los módulos originales
    Haga clic derecho en cada módulo y seleccione Quitar. Confirme la eliminación. No guarde cambios en los archivos exportados.
  3. Importe los módulos de nuevo
    Haga clic derecho en el proyecto en el Explorador de proyectos, seleccione Importar archivo y seleccione los archivos .bas que exportó. Repita para todos los módulos.
  4. Vuelva a agregar referencias y compile
    Establezca las referencias necesarias en Herramientas > Referencias. Compile el proyecto. El error debería resolverse.

ADVERTISEMENT

Si el error aún ocurre después de estas correcciones

Error de compilación de VBA en Word en una migración de 64 bits vs. 32 bits

Si movió el proyecto de Office de 32 bits a Office de 64 bits, declare las funciones de API con la palabra clave PtrSafe. Sin PtrSafe, Office de 64 bits trata la declaración como no definida. Agregue PtrSafe después de Private Declare o Public Declare. También actualice los parámetros Long utilizados para punteros a LongPtr.

Error de compilación de VBA en Word causado por una referencia huérfana a un complemento faltante

Algunos proyectos hacen referencia a bibliotecas de complementos de terceros. Si el complemento no está instalado en la máquina de destino, la referencia aparece como MISSING. Desmarque la referencia huérfana en Herramientas > Referencias. Si su código depende de ese complemento, instale el complemento en la máquina de destino o reescriba el código para evitar la dependencia.

Error de compilación de VBA en Word después de actualizar la versión de Office

Una actualización de Office puede cambiar los números de versión de las bibliotecas. Por ejemplo, “Microsoft Word 15.0 Object Library” cambia a “Microsoft Word 16.0 Object Library.” Abra Herramientas > Referencias, desmarque la versión anterior y marque la nueva versión. El error de compilación desaparecerá.

Enlace temprano vs. enlace tardío para proyectos migrados

Elemento Enlace temprano Enlace tardío
Referencia de biblioteca requerida Sí, marcada en el diálogo de Referencias No, se resuelve en tiempo de ejecución
Error en tiempo de compilación si falta la biblioteca Sí, “Sub or Function Not Defined” No, error en tiempo de ejecución solo si falta la biblioteca
Soporte de IntelliSense Sí, autocompletado completo y verificación de tipos No, sin autocompletado durante la edición
Rendimiento Ligeramente más rápido en tiempo de ejecución Ligeramente más lento en tiempo de ejecución
Mejor para proyectos migrados Solo si el entorno de destino es idéntico Recomendado para cualquier proyecto que se mueva entre máquinas

Ahora puede identificar y corregir el error de compilación “Sub or Function Not Defined” en un proyecto de VBA de Word migrado. Comience revisando el diálogo de Referencias en busca de entradas MISSING y vuelva a agregar la biblioteca correcta. Para proyectos que se mueven entre diferentes versiones o configuraciones de Office, convierta el código de enlace temprano a enlace tardío. Como limpieza final, exporte y reimporte todos los módulos para eliminar metadatos corruptos. La estrategia más efectiva a largo plazo es usar enlace tardío para cualquier referencia a objetos externos como Excel, Outlook o el objeto File System.

ADVERTISEMENT