vba - subrutina - no se puede encontrar el objeto o la biblioteca
¿Cuáles son las implicaciones de ejecutar una base de datos de acceso de Microsoft en 2003 y 2007? (3)
En general, tener múltiples versiones de Access instaladas en una máquina no es compatible y dará como resultado los problemas que está viendo con las referencias a los objetos.
Si la base de datos se crea en Access 2003, compilada en .MDE y luego implementada en una instancia de Windows separada que ejecuta Access 2007, no debe tener problemas importantes (aparte de los cambios de la interfaz de usuario, como barras de herramientas personalizadas que se lanzan en los complementos) cinta).
Para probar en múltiples versiones de Access, necesitará alguna forma de aislamiento entre cada versión. Yo uso múltiples máquinas virtuales para lograr esto. Mis principales ejecuciones de Windows VM Office 2007 e IE7 y tengo una segunda máquina virtual que tiene Office 2003 e IE6 para probar.
Tenga en cuenta que si desea simplemente usar Word, Excel y Outlook 2007 con Access 2003, puede instalar Access 2003 primero por sí mismo y luego realizar una instalación personalizada de Office 2007 y anular la selección de Access 2007.
¿Cuáles son las implicaciones de ejecutar una base de datos de Microsoft Access en 2003 y 2007?
¿Hay alguna clase que olvidé tomar?
El programa se construyó originalmente en la oficina 2003 y luego se ejecutó en 2007. Los problemas parecen ocurrir cuando la máquina en la que se está ejecutando tiene tanto 2003 como 2007 en ella. El problema también parece provenir de la referencia de la "Biblioteca de objetos de Microsoft Access 12.0" (o la "Biblioteca de objetos de Microsoft Access 11.0" en 2003). Para ver esto, solo mira el menú Herramientas: Refrences en la pantalla de VBA.
El síntoma del error es básicamente el código no reconocido (casi como si no reconociera el lenguaje de programación que estoy usando). Por lo general, sigue esto con un cuadro que dice "La expresión En carga que ingresó como la configuración de la propiedad del evento produjo el siguiente error: Objeto o clase no admite el conjunto de eventos". También puede reemplazar "On Load" con "On Click" para botones o "On Change" para cuadros de texto.
Personalmente, sospecho que la computadora está tomando partes de la Biblioteca de objetos de Microsoft Access 11.0 / 12.0 y luego las mezcla en una referencia de VBA inútil. Lo que confirma aún más mi sospecha es el cuadro que aparece al pasar entre los dos que dice "Configurar Microsoft Access" Otro problema que confirma mi sospecha es que se ejecutará en el que se abra primero (2007, por ejemplo) y luego no se ejecuta en el otro (2003 continuando el ejemplo)
El único otro problema que tuve que corregir fue cambiar la última parte de DoCmd.OpenForm ,,,,, acFormReadOnly (o acReadOnly, dependiendo de cómo se sienta la máquina en ese día en particular, sí, podría funcionar con una, un día y luego quiere que lo cambie de otra forma) simplemente para bloquear los cuadros de texto individuales
Tal vez no sea muy codificante, pero creo que podría ser corregido mediante codificación.
Con suerte, eso es suficiente para que alguien proponga algo.
La posición oficial de Microsoft es que la instalación de múltiples versiones de oficina en la misma PC no es compatible ni recomendada, y Access 2007 parece estar diseñado para demostrarnos eso.
Dicho esto, puede evitar la mayoría de los problemas haciendo lo siguiente:
1 - Dividir el db en un back end y front end. Coloque el back-end (tablas y relaciones) en una carpeta de red y coloque una copia de la interfaz (todos los demás objetos) en el escritorio de cada usuario.
2 - Lo mejor es hacer que la interfaz sea un mde para evitar que las referencias se mezclen cada vez que abra el archivo db en la otra versión de Access.
3 - Cree un atajo para abrir el front-end con la versión deseada de Access para que siempre se abra con esa versión. (¡Y recuerde usar el atajo!) En el destino del atajo:
"ruta de Acceso 12 msaccess.exe" "ruta a db.mdb"
Tenemos una aplicación MS-Acces, desarrollada con Access 2003 y utilizada en versión completa o en tiempo de ejecución de Access 2003 y Access 2007 (Access 2007 Runtime es gratuito, ¡estamos haciendo un gran uso de él!). No hay ningún problema en particular, excepto la gestión de referencias. Nuestro código analiza la versión de Office instalada en la computadora y actualiza automáticamente las referencias correspondientes (no solo Access sino también Excel, Outlook, Word, etc. El código es muy complicado pero ¡de gran interés!)
Que yo sepa, ningún objeto principal, propiedad o método disponible en Office 2003 / VBA quedó en desuso en Office 2007. El código de Office 2003 se ejecutará con Access 2007 una vez resueltas estas cuestiones de referencia. Algunos objetos nuevos se introdujeron en Office 2007, por lo que no aconsejaría a ningún desarrollador que lo use para desarrollar código que se vaya a usar con Access 2003.
Pero el problema principal y real de su pregunta es: ¿por qué debería uno ejecutar ambas versiones de acceso en la misma computadora? Esto es lo que haría si quiero asegurarme de bloquear mis aplicaciones. ¡Creo que si tus objetivos eran desarrollar software, definitivamente deberías encontrar una mejor configuración para tu máquina!