Pregunta

Tengo una aplicación de acceso a VBA que también hace uso de Word-VBA.Mientras ejecuta la aplicación en mi máquina local, funciona bien.Una vez que se mueve a otros (las mismas versiones de acceso y palabra) se bloqueará cuando se trata de la parte de la palabra VBA.Comandos como Document.Open o .Saveas2 falla: Method 'SaveAs2' of object failed, por ejemplo.

También he notado que las bibliotecas que he referenciado en la solicitud son requeridas por cualquier otro usuario final.Estoy acostumbrado a compilar con las bibliotecas y desde ese punto, siempre se incluyen en .jar / .exe / etc, pero parece que cuando mueve la aplicación a las computadoras de otros, siempre está tratando de recompilar?

No estoy bien versado en VBA, ¡así que estoy especular que mis funciones de Word-VBA fallidas son debido a un error de referencia, alguna otra idea?

¿Fue útil?

Solución

Las "Bibliotecas" que la VBA puede hacer referencia son en realidad com objetos , generalmente empaquetados como archivos DLL . Son objetos que se instancian dinámicamente en el tiempo de ejecución (si aún no lo están) cuando lo solicitan. Están cargados por Windows en la memoria y su programa utiliza el estándar COM para interactuar con ellos, llamar a los métodos y obtener propiedades de configuración o configuración (comunicación de interproceso). En general, hay dos formas de interactuar con ellos: vinculación temprana y vinculación tardía.

Con la vinculación temprana, agrega una referencia a la biblioteca mientras aún está escribiendo un código, lo que le permite a VBA IDE proporcionar autocompletar y algunas comprobaciones de errores de tiempo de compilación. Instanciate objetos con la palabra clave "nueva" y escribiendo directamente el nombre del objeto. Sin embargo, la vinculación temprana requiere que seleccione una DLL específica y posiblemente una versión específica de la interfaz. Esto puede llevar a problemas si hace referencia a una versión de interfaz específica que uno de sus usuarios no tiene.

Con la vinculación tardía, usted instancie los objetos utilizando CreateObject o GetObject, solicitándolos por nombre de Windows. Windows será Mira el nombre < / a> y devolver una referencia al objeto. Las variables en su código son simplemente objetos y los métodos de llamada son un poco peligrosos porque el compilador le permite escribir cualquier nombre del método que desee y no proporciona advertencias de tiempo de compilación. Esto tiene la ventaja de que siempre que esté llamando métodos bien establecidos y nada nuevo o en desuso, el código funcionará independientemente de la versión del usuario.

En cuanto al error que está recibiendo, es posible que desee verificar la versión de Office en las máquinas de usuario, saveas2 se agregó en la oficina 2010.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top