"No se puede encontrar el proyecto o la biblioteca" para las funciones estándar de VBA

80

Así que tengo que ejecutar la aplicación de Excel de otra persona en mi PC, y obtengo "No puedo encontrar el proyecto o la biblioteca" en funciones estándar como fecha, formato, hexadecimal, medio, etc.

Algunas investigaciones indican que si prefijo estas funciones con "VBA". como en "VBA.Date", entonces funcionará bien.

Las páginas web sugieren que tiene que ver con las referencias de mi proyecto en mi sistema, mientras que deben estar bien en el sistema del desarrollador. Voy a estar lidiando con esto por algún tiempo de otros, y distribuiré estas aplicaciones a muchos otros, así que necesito entender qué está mal con mi configuración de Excel que necesito arreglar, o qué se debe cambiar en el xls para que se ejecute en una variedad de sistemas. Me gustaría evitar que todos usen "VBA". como referencia explícita, pero si no hay una solución ideal, supongo que eso es lo que tendremos que hacer.

  • ¿Cómo hago "VBA"? implícito en las propiedades / referencias / etc de mi proyecto?

-Adán

Adam Davis
fuente
¿Está desarrollando en una versión de Excel y distribuyendo a los usuarios que usan una versión diferente?
Russ Cam
Ese puede ser el caso, no sé qué versión están usando los desarrolladores. Voy a revisar.
Adam Davis
Tuve que prefijar un montón de funciones con vba. antes de que me deje encontrar la biblioteca que falta.
kztd
Intente abrir el archivo con Excel en línea (Office 365) y guardar con un nuevo nombre de archivo. ¡Esto funcionó para mí!
Sean McCarthy

Respuestas:

64

He visto errores en funciones estándar si faltaba una referencia a una biblioteca totalmente diferente.

En el editor de VBA, ejecute el comando Compilar desde el menú y luego verifique el cuadro de diálogo Referencias para ver si falta algo y, si es así, intente agregar estas bibliotecas.

En general, parece ser una buena práctica compilar el código VBA completo y luego guardar el documento antes de la distribución.

Dirk Vollmar
fuente
4
Estoy de acuerdo. Las referencias faltantes se marcarán claramente como FALTA. En su caso, sospecho que es una versión posterior de la biblioteca de Excel, que se puede solucionar con un enlace tardío o seleccionando la biblioteca anterior. No creo que compilar el código ayude con las referencias faltantes.
Fionnuala
Hmm. Recibo una solicitud de contraseña de VBAproject. La trama se complica.
Adam Davis
1
Creo que es hora de encontrar al desarrollador original.
Toby Allen
Solo quería agregar que yo también tuve este problema, pero en un escenario bastante único. Algunas máquinas tendrían todas las DLL (incluido en este caso Acrobat Distiller) y otras no. Todavía necesitaba las máquinas sin la DLL de Acrobat para ejecutar macros que no la usaban, por lo que recurrí a VBA. adición de espacio de nombres para estas funciones. Esto resolvió el problema y funcionó en ambos escenarios.
Oliver Gray
Solo quería señalar que encontré el mismo problema, sin ninguna de las referencias marcadas como FALTA, no he encontrado una resolución para ello, pero una solución temporal es: abra el diálogo de referencia en VBE, no toque nada simplemente haga clic en Aceptar y el proyecto VBA volverá a la normalidad.
Rick
32

Yo tuve el mismo problema. Esto funcionó para mí:

  • En VB vaya a Herramientas »Referencias
  • Desmarque la biblioteca "Crystal Analysis Common Controls 1.0". O cualquier biblioteca.
  • Solo deja estas 5 referencias:
    1. Visual Basic para aplicaciones (esta es la biblioteca que define el lenguaje VBA).
    2. Biblioteca de objetos de Microsoft Excel (Esto define todos los elementos de Excel).
    3. Automatización OLE (Esto especifica los tipos para vincular e incrustar documentos y para la automatización de otras aplicaciones y la "plomería" del sistema COM que utiliza Excel para comunicarse con el mundo exterior).
    4. Microsoft Office (esto define las cosas que son comunes a todos los programas de Office, como las barras de comandos y los controles de la barra de comandos).
    5. Microsoft Forms 2.0 Esto es necesario si está utilizando un formulario de usuario. Esta biblioteca define cosas como el formulario de usuario y los controles que puede colocar en un formulario.
  • Luego Guardar.
andres
fuente
Para el mío, tuve que desmarcar "Biblioteca de objetos de MicroSoft MapPoint 19.0" que no se usó en la macro en cuestión, pero se usó en otra parte de la hoja de cálculo.
ELW
2
El mío era "Microsoft Windows Common Controls 6.0 (SP4)", que estaba presente en mi máquina Excel 2010 pero en una computadora portátil con Excel 2013. Además, parece estar en uso (aparece "No se puede quitar el control o la referencia; en uso" si la desactiva) así que tengo que averiguar lo que está utilizando y deshacerse de ese ...
Rich
[Corrección: lo anterior debería haber dicho " no en una computadora portátil ..."] Resulta que tampoco puedo eliminar la referencia del proyecto en la máquina donde funciona. Ahora intenté eliminarlo programáticamente (usando .VBProject.References, pasando por encima de ellos y llamando a Remove en el malo para eliminarlo) y obtengo "Error en tiempo de ejecución '-2147319779 (8002801d)': biblioteca de objetos no rEGISTRADO" de la máquina sin la biblioteca, y me sale 'error de tiempo de ejecución '57101': no se puede eliminar de referencia por defecto' en la máquina que hace que la biblioteca presente MSComctlLib. Grrrr.
rico
15

He experimentado este problema exacto y encontré, en la máquina del usuario, una de las bibliotecas de las que dependía estaba marcada como "FALTA" en el cuadro de diálogo de referencias. En ese caso, era una biblioteca de fuentes de oficina que estaba disponible en mi versión de Office 2007, pero no en el escritorio del cliente.

El error que obtiene es una pista falsa (como lo señaló divo).

Afortunadamente, no estaba usando nada de la biblioteca, por lo que pude eliminarlo de las referencias de XLA por completo. Supongo que una extensión de la mejor práctica sugerida por divo sería probar para verificar el XLA en todas las versiones de Office de destino (no es una mala idea en cualquier caso).

RojoAzulCosa
fuente
10

En mi caso, fue que la función era AMBIGUOSA ya que estaba definida en la biblioteca VBA (presente en mis referencias), y también en la Biblioteca de objetos de Microsoft Office (también presente). Eliminé la biblioteca de objetos de Microsoft Office y ¡listo! No es necesario utilizar VBA. prefijo.


fuente
6

En mi caso, ni siquiera pude abrir "Referencias" en la ventana de Visual Basic. Incluso intenté reinstalar Office 365 y no funcionó. Finalmente, intenté deshabilitar las macros en la configuración del "Centro de confianza". Cuando reinicié Excel, recibí el mensaje de advertencia de que las macros estaban deshabilitadas y, cuando hice clic en "habilitar", ya no recibí el mensaje de error.

Más tarde, volví a habilitar todas las macros en la configuración del "Centro de confianza", ¡y el mensaje de error no apareció!

Oye, si nada más funciona para ti, prueba lo anterior; funcionó para mí! :)

Actualización: el problema volvió, y así es como lo "arreglé" la segunda vez :

Abrí mi libro de trabajo en Excel en línea (Office 365, en el navegador, que de todos modos no admite macros), lo guardé con un nuevo nombre de archivo (todavía usando la extensión de archivo .xlsm) y lo volví a abrir en el software de escritorio. Funcionó.

Sean McCarthy
fuente
3
Abrir el libro de trabajo en Excel en línea es la única solución a este problema que me ha funcionado hasta ahora, y créanme, he intentado todo, desde el modo seguro, hasta reinstalar / reparar Office, reiniciar mi computadora y orar. Ojalá entendiera más de la causa y el efecto aquí, porque parece que sucede de forma aleatoria en los .xlsmlibros de trabajo habilitados para macros , aunque con bastante poca frecuencia; anecdóticamente, parece ocurrir con más frecuencia en archivos más complicados. Parece que algún elemento de la biblioteca de VBA puede corromperse, pero el hecho de que Excel en línea puede solucionarlo, mientras que otros métodos no pueden es extraño
Mako212
1
La solución más fácil que he encontrado hasta ahora para este error tan molesto. Supongo que vendría de usuarios coautores (los archivos de Excel están en Sharepoint) que tienen la misma versión principal de Excel, pero no las mismas actualizaciones menores (por ejemplo, Versión 2101 Build 13628.20000 -vs- Version 2101 Build 13624.20002). ¿Podría ser eso? Me gustaría mucho llegar al fondo de este problema, que parece ser mucho más frecuente desde que Microsoft eliminó OfficeUploadCenter en los últimos meses (lo que ahora causa muchos errores de sincronización).
flo5783 hace
0

En mi caso, estaba verificando el trabajo realizado en la computadora de mi oficina (con Visio instalado) en casa (sin Visio). A pesar de que VBA parecía estar atascado en funciones predeterminadas simples, el problema era que tenía referencias a las bibliotecas de Visio aún activas.

SmrtGrunt renunció porque Monica
fuente
0

Encontré referencias a un archivo de programa AVAYA / CMS. Totalmente aleatorio, esto fue en MS Access, nada que ver con AVAYA. Tengo AVAYA en mi PC y otros no, así que esto explica por qué funcionó en mi máquina y no en otras, pero no cómo Access se vinculó a AVAYA. De todos modos, acabo de desmarcar la referencia y parece haber solucionado el problema

Daniel panadero
fuente
0

Incluso cuando todas las referencias están bien, el problema del prefijo provoca errores de compilación.

¿Qué hay de crear un sub de búsqueda y reemplazo para todas las 'funciones VBA integradas' en todos los módulos, como este:

reemplazar texto en el módulo de código

por ejemplo, "= Fecha" se reemplazará por "= VBA.Date".

por ejemplo, "Fecha (" se reemplazará por "VBA.Date (".

(excepto "dim t As Date" o "mydate")

Todas las funciones de vba para buscar y reemplazar están escritas aquí:

lista de funciones vba

Marca Noam
fuente
-1

He tenido este error de forma intermitente durante aproximadamente dos años en varios archivos XLSM (lo que es más molesto, ya que cuando ocurre, ¡no hay nada de malo en el archivo! - Sospecho que los procesos huérfanos de Excel son parte del problema)

La solución más eficiente que encontré ha sido usar Python con oletools https://github.com/decalage2/oletools/wiki/Install y extraer el código VBA de todos los módulos y guardarlo en un archivo de texto.

Luego, simplemente cambio el nombre del archivo a archivo zip (¡copia de seguridad por si acaso!), Abro este archivo zip y elimino el archivo xl / vbaProject.bin. Vuelva a cambiar el nombre a XLSX y debería estar listo.

Copie el código VBA guardado (que necesitará la limpieza de saltos de línea, comentarios y otras cosas. También deberá agregar las bibliotecas que faltan).

Esto me ha salvado cuando otros métodos no lo han hecho.

YMMV.

Sam
fuente