Después de la actualización de Microsoft Office 2007 a Office 2010 algunos scripts VBA personalizado incrustado en nuestro software no pudo compilar con el siguiente mensaje de error:reconstrucción mediante programación .exd-archivos al cargar VBA
biblioteca de objeto no válido o contiene referencias para objetar las definiciones que no se pudieron encontrar.
Hasta donde sé, este error es el resultado de una actualización de seguridad de Microsoft (Microsoft Security Advisory 960715). Al agregar controles ActiveX a scripts VBA, la información sobre los controles se almacena en los archivos de caché en el disco duro local (archivos .exd). La actualización de seguridad modificó algunos de estos controles, pero los archivos .exd no se actualizaron automáticamente. Cuando los scripts de VBA intentan cargar las versiones anteriores de los controles almacenados en los archivos en caché, se produce el error. Estos archivos de caché se deben eliminar del disco duro para que los controles se carguen correctamente (lo que creará archivos .exd nuevos y actualizados automáticamente).
Lo que me gustaría hacer es programáticamente (utilizando Visual C++) eliminar los antiguos archivos .exd obsoletos cuando se carga nuestro software. Al abrir un proyecto de VBA usando CApcProject::ApcProject.Open
configuré la siguiente marca: axProjectThrowAwayCompiledState
.
TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState)));
Según la documentación, este indicador debería hacer que el proyecto de VBA para volver a compilar y los archivos temporales que se desea borrar y reconstruido. También traté de actualizar la suma de comprobación de la biblioteca de tipos de aplicaciones de host, que debería tener el mismo efecto. Sin embargo, ninguna de estas correcciones parece hacer el trabajo y me estoy quedando sin ideas.
Me gustaría sugerir que primero intente eliminar manualmente los archivos .exd para verificar que resuelve su problema (antes de intentar hacerlo programáticamente). En mi caso, NO resolvió el problema. http://stackoverflow.com/questions/4495002/object-library-invalid-or-contains-references-in-excel-vba-with-datepicker – CaBieberach
Podría ser el problema de KillBit al que se refiere, o podrían ser otras cosas . ¿Actualizaste de x86 Office 2007 a x64 Office 2010? ¿Ha revisado sus referencias de VBA para los artículos faltantes? ¿Aparece el error "Compilar error en el módulo oculto"? ¿Ha revisado http://blogs.msdn.com/b/vsod/archive/2009/06/05/visual-basic-6-controls-stop-working-after-security-advisory-960715.aspx? ¿Deseleccionó "Ignorar otras aplicaciones que utilizan el intercambio dinámico de datos (DDE)" en las opciones de Excel? De acuerdo con @CaBieberach, es posible que deba confirmar que este es realmente el problema al eliminar manualmente .exd. –
Hemos verificado que eliminar los archivos exd resuelve el problema (al hacerlo manualmente en varias máquinas de prueba). El problema surge al actualizar a la versión x86 de Office (no admitimos Office 2010 x64 en combinación con nuestro software). Por ahora, cuando un cliente experimenta este problema, les permitimos ejecutar un script que borra todos los archivos exd. – aspartame