none
Makro starten in Embbeded OLE Object Excel RRS feed

  • Frage

  • Hi, Ich habe ein VC2008-MFC Programm in dem ich via COleClientItem ein Excelsheet einbette.

    Wenn ich in die dann erscheinende Excel-Menüzeile gehe sehe ich das ein von mir geschriebenes Makro "Makro1" in diesem xls gibt. Nun hole ich mir das Automation Interface für das Workbook aus dem m_lpObject des eingebetteten Objekts. Klappt auch prima. Mit diesem Workbook Object kann ich beispielsweise einen Range selektieren und sehe das auch sofort im eingebetteten Objekt. Nun will ich aber auch Makro1 starten. Dazu hole ich mir via GetApplication() des Workbooks das Application Objekt und versuche dann mit der Methode Run dieses Objektes das Makro zu starten. Dann bekomme ich aber die Fehlermeldung "Excel hat das Makro nicht gefunden. Versuch eich es über den Syntax Run('MeinExcel.xls'!Makro1') gibt es keine Fehlermeldung mehr aber das Makro scheint in einer weiteren Instanz von Excel abzulaufen, denn ich sehe nichts im eingebetteten Objekt. Stattdessen habe ich nach schließen meines Programmes noch ein Excel offen in dem das Makro abgelaufen ist.

    Klingt kompliziert aber vielleicht weiß doch jemand wie ich ein Makro ausführen kann, wenn ich das "Application Interface" von einem COleClientItem bekommen habe.

    Freudi

    Donnerstag, 6. Juni 2013 13:43

Alle Antworten

  • Also mit der Workbook Run Option sollte dies funktionieren.

    spWorkbook->Run(L"Makro1");

    Wenn Du den Syntax mit dem Dateinamen benutzt erzeugst Du eine zweite Instanz.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Montag, 10. Juni 2013 06:44
    Moderator
  • Hallo Martin.

    Danke für die Antwort. Workbook.Run hätte ich ja genommen aber Workbook hat keine Run Methode nur RunAutoMacros und das  ist was anderes.

    siehe : WorkbookDoc

    Ich musste mir also das Applicationobject holen aber mit dem geht's irgendwie nicht.

    Noch ein Tipp?

    Freudi

    Dienstag, 11. Juni 2013 09:18
  • Verwende ja die generierte h Datei. Habe jetzt nochmal mit GetIDsOfName versucht ob Workbook eine Run Methode besitzt. Leider nicht.

    Im Excel habe ich auch die Möglichkeit zu sagen ob das Makro zum Workbook oder zum Sheet oder Global sein soll. Aber keines davon funktioniert wenn ich mit eingebetteten Objekten arbeite. Starte ich per "reiner" Automatisierung findet er die Makros.

    Dienstag, 11. Juni 2013 09:49