Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Button in Excel per Delphi drücken (https://www.delphipraxis.net/89395-button-excel-per-delphi-druecken.html)

Codewalker 30. Mär 2007 13:58


Button in Excel per Delphi drücken
 
Ich habe in Excel einen CommandButton (aus der Symbolleiste Steuerelemente). Dieser führt ein Makro bei Click aus. Ich schaffe es aber von Delphi aus nicht, einen Klick auf diesen Button zu simulieren oder das Makro auszuführen. Beim Button weiß ich nicht, wie das geht, beim Makro bekomme ich immer den Fehler: "Makro nicht gefunden" obwohl der Name stimmt. Hat jemand eine Idee was ich falsch mache? :gruebel:

Mazel 30. Mär 2007 15:50

Re: Button in Excel per Delphi drücken
 
Hallo,

ich muss zugeben, ich habe selten mit Excel gearbeitet, daher weis ich nicht, wie im einzelnen die Buttons angeordnet bzw. benannt sind, aber grundsätzlich sollte es gehen, dass du dir mit Hier im Forum suchenFindWindow das Handle von Excel und mit Hier im Forum suchenFindWindowEx das Handle des Buttons holst. Dann kannst du mit Hier im Forum suchenPostMessage oder Hier im Forum suchenSendMessage an den Button dein Ereignis senden:
Delphi-Quellcode:
PostMessage(ButtonHandle, BM_CLICK, 0, 0);
Wie man ein Makro startet weis ich leider auch nicht.

Gruß
Mazel

toms 30. Mär 2007 16:40

Re: Button in Excel per Delphi drücken
 
Zitat:

Zitat von Codewalker
beim Makro bekomme ich immer den Fehler: "Makro nicht gefunden" obwohl der Name stimmt. Hat jemand eine Idee was ich falsch mache? :gruebel:

Wie sieht denn der Code zum Ausführen des Makros aus?

shmia 30. Mär 2007 16:51

Re: Button in Excel per Delphi drücken
 
Ein Macro in Excel über den Umweg eines Button zu starten ist natürlich Käse.
Man kann direkt das Excel Application Objekt über Automatisierung anziehen und dann die Methode
Run() aufrufen.
Code:
[id(0x00000103), helpcontext(0x00010103)]
        HRESULT Run(
                        [in, optional] VARIANT Macro,
                        [in, optional] VARIANT Arg1,
                        [in, optional] VARIANT Arg2,
                        [in, optional] VARIANT Arg3,
                        [in, optional] VARIANT Arg4,
                        [in, optional] VARIANT Arg5,
                        [in, optional] VARIANT Arg6,
                        [in, optional] VARIANT Arg7,
                        [in, optional] VARIANT Arg8,
                        [in, optional] VARIANT Arg9,
                        [in, optional] VARIANT Arg10,
                        [in, optional] VARIANT Arg11,
                        [in, optional] VARIANT Arg12,
                        [in, optional] VARIANT Arg13,
                        [in, optional] VARIANT Arg14,
                        [in, optional] VARIANT Arg15,
                        [in, optional] VARIANT Arg16,
                        [in, optional] VARIANT Arg17,
                        [in, optional] VARIANT Arg18,
                        [in, optional] VARIANT Arg19,
                        [in, optional] VARIANT Arg20,
                        [in, optional] VARIANT Arg21,
                        [in, optional] VARIANT Arg22,
                        [in, optional] VARIANT Arg23,
                        [in, optional] VARIANT Arg24,
                        [in, optional] VARIANT Arg25,
                        [in, optional] VARIANT Arg26,
                        [in, optional] VARIANT Arg27,
                        [in, optional] VARIANT Arg28,
                        [in, optional] VARIANT Arg29,
                        [in, optional] VARIANT Arg30,
                        [out, retval] VARIANT* RHS);
Delphi-Quellcode:
var
 objXL, MacroResult : OleVariant;
begin
    objXL := CreateOleObject('Excel.Application');
    objXL.Visible := True
    // Open the Workbook
    objXL.Workbooks.Open('C:\Statistik.XLS');
    MacroResult := objXL.Run('MeinMacro', 0);  // 0 ist ein Übergabeparameter, max 30 Stück möglich

end;

Mazel 30. Mär 2007 16:57

Re: Button in Excel per Delphi drücken
 
@shmia: wenn man weis wie, ist es natürlich so besser. :wink:

Codewalker 31. Mär 2007 10:35

Re: Button in Excel per Delphi drücken
 
Alles klar. Weil ich zwei Makros mit dem selben Namen in verschiedenen Tabellenblätter hatte, musste ich noch "Tabelle1." vor den Makronamen setzen und das Makro wurde automatisch als "Private" gekennzeichnet. Das muss man auch noch entfernen, dann klappt das mit dem Run(..) wunderbar. Danke für die Tipps


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz