Word-Makro aus C++ ausführen
-
Hi@all,
ich möchte ein Makro, gespeichert in der Normal.dot von Word 2003, ausfüren.
Bisher geschieht folgendes, die C++ Applikation öffnet eine Vorlage und nachdem die Vorlage geöffnet ist, soll das Makro ausgeführt werden.
Es läuft alles über Automation.
Ich hoffe jemand kann mir hier weiterhelfen.Gruß
CrazyPlaya
(Edit: Habe den Betreff mal so geändert, dass man nicht an die Makros von C denkt.)
-
Ich hab mal folgendes in JScript ausprobiert:
var wrd = new ActiveXObject( "Word.Application" ); wrd.Run( "Normal.Modul1.Test" );
Das ruft im Modul1 der Nomal.dot die Funktion Test auf.
Mit etwas MFC kann man das ja einfach umsetzen.
-
Hallo,
ich habe mir mal folgendes zusammengestrickt:
// Word-Makro ausführen _Application WordApp; COleException e; CLSID clsid; // erzeuge das Word Objekt, das wir durch die OLE Automatisierung bewegen if (CLSIDFromProgID(OLESTR("word.application"), &clsid) != NOERROR) { AfxMessageBox("Word-Objekt kann nicht erzeugt werden!"); return; } // versuche das bereits aktive Word zu bekommen, bevor wir einen neuen erzeugen LPUNKNOWN lpUnk; LPDISPATCH lpDispatch; if (GetActiveObject(clsid, NULL, &lpUnk) == NOERROR) { HRESULT hr = lpUnk->QueryInterface(IID_IDispatch, (LPVOID*)&lpDispatch); lpUnk->Release(); if (hr == NOERROR) WordApp.AttachDispatch(lpDispatch, TRUE); } if(lpUnk == NULL) WordApp.m_lpDispatch = NULL; // wenn noch kein Dispatch Zeiger angehängt wurde, muß ein neuer erzeugt werden if (WordApp.m_lpDispatch == NULL){ if(!WordApp.CreateDispatch(clsid, &e)) { AfxMessageBox("Word-Objekt kann nicht erzeugt werden!"); return ; } } COleVariant Var(DISP_E_PARAMNOTFOUND,VT_ERROR); WordApp.SetVisible(TRUE); WordApp.Run("Adi",&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var,&Var);
Damit wird ein Makro Namens ADI in der Normal.dot ausgeführt.
Das _Application-Objekt habe ich durch Einlesen irgendeiner OLB-Datei erzeugt (winword.olb oder ähnlich).
Frag mich nicht, was hier genau gemacht wird, aber auf jeden Fall funktioniert es
-
AndRo67: Besten Dank das hat geholfen:)
-
AndRo67: Besten Dank das hat geholfen:)