| auteurs : blondelle, pottiez |
Cette procédure permet de désactiver une Macro VB qui s'exécute automatiquement à l'ouverture de Word.
Elle équivaut au maintien de la touche MAJ enfoncée à l'ouverture de Word.
Variant vFileName, vLink, vReadOnly, vFormat, vReadPass, vWDocuments, vWDocument;
Variant vMSWord;
vMSWord = Variant:: CreateObject (" Word.Application " );
vMSWord.OlePropertyGet (" WordBasic " ).OleProcedure (" DisableAutoMacros " );
vMSWord.OlePropertySet (" Visible " , true );
vFileName = " c:\\book1.doc " ;
vLink = Unassigned;
vReadOnly = false ;
vFormat = Unassigned;
vReadPass = " MotDePasse " ;
vWDocuments = vMSWord.OlePropertyGet (" Documents " );
vWDocument = vWDocuments.OleFunction (" Open " , vFileName, vLink, vReadOnly, vFormat, vReadPass);
|
|
| auteurs : blondelle, pottiez | Le Variant vMSWord représente une instance de Word, vWordDoc un document Word. Il s'agit de manipuler un module VBE et de créer à la volée une macro, puis de la supprimer après exécution.
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité de Word (cf. Options de sécurité, sécurité des macros).
Variant VBComp;
VBComp = vWordDoc.OlePropertyGet (" VBProject " ).OlePropertyGet (" VBComponents " ).OleFunction (" Add " , 1 );
VBComp.OlePropertySet (" Name " , " MyModule " );
VBComp.OlePropertyGet (" CodeModule " ).OleProcedure (" InsertLines " , 1 , " Sub laMacro() " );
VBComp.OlePropertyGet (" CodeModule " ).OleProcedure (" InsertLines " , 2 , " ActiveDocument.Content.Text = \"Coucou\" " );
VBComp.OlePropertyGet (" CodeModule " ).OleProcedure (" InsertLines " , 3 , " End Sub " );
vMSWord.OleProcedure (" Run " , " laMacro " );
vWordDoc.OlePropertyGet (" VBProject " ).OlePropertyGet (" VBComponents " ).OleFunction (" Remove " , VBComp);
|
Cette façon de faire est plutôt adaptée à l'exécution de petites macros, voire de macros dont le code doit être rendu dynamique (c'est à dire changeant selon certains paramètres saisis dans votre application C++).
|
| auteurs : blondelle, pottiez, firejocker | Le Variant vMSWord représente une instance de l'application Word, et on suppose qu'un document est ouvert.
Cette procédure permet de lancer une macro connaissant son nom ici "laMacro".
vMSWord.OleProcedure (" Run " , " laMacro " );
|
Ici on suppose qu'une macro nommée "laMacro" existe.
|
| auteurs : blondelle, pottiez | Le code VB est créé par exemple sous Word et est recopié dans un fichier texte que l'on va utiliser pour importer la macro. macro_essai.txt |
Sub laMacro()
ActiveDocument.Content.Text = "Coucou"
End Sub
|
On lance Word, puis on ouvre le document, et on exécute sur le Variant VBComp la procédure d'importation comme suit :
Variant Appli, WordDoc, WordDocs, VBComp, vFileName;
Appli = Variant:: GetActiveObject (" Word.Application " );
vFileName = " C:\\book1.doc " ;
WordDocs = Appli.OlePropertyGet (" Documents " );
WordDoc = WordDocs.OleFunction (" Open " , vFileName);
VBComp = WordDoc.OlePropertyGet (" VBProject " ).OlePropertyGet (" VBComponents " );
VBComp.OleProcedure (" Import " , " C:\\macro_essai.txt " );
|
Attention, le code suivant peut ne pas fonctionner selon votre configuration sécurité de Word (cf. Options de sécurité, sécurité des macros).
|
| auteurs : blondelle, pottiez |
Cette procédure permet de détruire une ou plusieurs macros VB contenues dans un module.
VBComp.OleFunction (" Remove " , VBComp.OleFunction (" Item " , " Module1 " ));
|
|
Consultez les autres F.A.Q.
|
|