Question

J'ai une application access-vba qui utilise également word-vba.Lors de l'exécution de l'application sur ma machine locale, elle fonctionne bien.Une fois qu'il est déplacé vers d'autres (mêmes versions d'access et de word), il plantera en ce qui concerne la partie vba de word.Les commandes telles que document.open ou .saveas2 échouent : Method 'SaveAs2' of object failed Par exemple.

J'ai également remarqué que les bibliothèques que j'ai référencées dans l'application sont requises par tout autre utilisateur final.J'ai l'habitude de simplement compiler avec les bibliothèques et à partir de ce moment-là, elles sont toujours incluses dans le fichier .jar/.exe/etc, mais il semble que lorsque vous déplacez l'application vers les ordinateurs d'autres, elle essaie toujours de recompiler ?

Je ne connais pas bien VBA, donc je suppose que mes fonctions Word-VBA défaillantes sont dues à une erreur de référencement, d'autres idées ?

Était-ce utile?

La solution

Les "bibliothèques" auxquelles VBA peut faire référence sont en réalité Objets COM, généralement conditionnés sous forme de fichiers DLL.Ce sont des objets qui sont instanciés dynamiquement au moment de l'exécution (s'ils ne le sont pas déjà) sur demande.Ils sont chargés par Windows en mémoire et votre programme utilise le standard COM pour interagir avec eux, en appelant des méthodes et en obtenant ou en définissant des propriétés (communication interprocessus).Il existe généralement deux manières d’interagir avec eux :reliure précoce et reliure tardive.

Avec la liaison anticipée, vous ajoutez une référence à la bibliothèque pendant que vous êtes encore en train d'écrire du code, ce qui permet à l'IDE VBA de fournir une complétion automatique et une vérification des erreurs au moment de la compilation.Vous instanciez les objets avec le mot-clé "new" et en tapant directement le nom de l'objet.Cependant, la liaison anticipée nécessite que vous sélectionniez une DLL spécifique et éventuellement une version spécifique de l'interface.Cela peut entraîner des problèmes si vous faites référence à une version d'interface spécifique que l'un de vos utilisateurs ne possède pas.

Avec la liaison tardive, vous instanciez des objets à l'aide de CreateObject ou GetObject, en les demandant par leur nom à Windows.Windows va cherche le nom et renvoie une référence à l'objet.Les variables de votre code sont simplement des objets et appeler des méthodes est un peu dangereux car le compilateur vous permet de saisir le nom de méthode de votre choix et ne fournit aucun avertissement au moment de la compilation.Cela présente l'avantage que tant que vous appelez des méthodes bien établies et rien de nouveau ou obsolète, le code fonctionnera quelle que soit la version de l'utilisateur.

En ce qui concerne l'erreur que vous obtenez, vous souhaiterez peut-être vérifier la version d'Office sur les machines des utilisateurs - Enregistrer sous2 a été ajouté dans Office 2010.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top