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:)


Anmelden zum Antworten