[Gelöst] Calc: Makro mit anderem Makro aufrufen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

diamondialis
*
Beiträge: 19
Registriert: Mo, 19.12.2011 22:24

[Gelöst] Calc: Makro mit anderem Makro aufrufen

Beitrag von diamondialis »

Guten Abend!

Diesmal bezieht sich meine Frage auf die "Verkettung von Makros...

Folgendes Szenario:

Ich habe einen Dialog "NE_Dia" mit 2 Schaltflächen: "Speichern" und "Speichern + Neu"

Beide Schaltflächen sollen das gleiche Makro aufrufen: "SR_NEB_Local"
Dazu habe ich den Schaltflächen unter Ereignisse -> Aktion ausführen, das Makro "SR_NEB_Local" zugewiesen.

Zusätzlich dazu wird Schaltfläche "Speichern" noch unter "Art der Schaltfläche" auf "OK (0)" und Schaltfläche "Speichern + Neu" auf "Abbrechen (1)" gestellt, weil ich das anschließend ja abfragen möchte.

Laut Dannenhöfer kann man über den Code: Rueckwert=Dialog.execute() die gedrückte Schaltfläche abfragen.

Mein Ziel ist jetzt:

Wenn Schaltfläche "Speichern" gedrückt wird, soll das Makro "SR_NEB_Local" ausgeführt und anschließend der Dialog mit: NE_Dia.EndExecute() und NE_Dia.Dispose() beendet werden. Funktioniert auch wunderbar.

Wenn aber Schaltfläche "Speichern + Neu" gedrückt wird, soll der Dialog zwar auch "abgeschlossen", also das Makro ausgeführt werden, aber danach soll der gleiche Dialog mit dem Makro "SR_NE_Dia" wieder ausgeführt werden.

Mein Lösungsansatz ist bisher:

NE_Dia_Exec = Dialog.execute() --> Gedrückte Schaltfläche abfragen
NE_Dia.EndExecute()
NE_Dia.Dispose()
--> Dialog beenden
If NE_Dia_Exec = 1
?!?!?!?!?!?!?!?!?!?
End If
--> Wenn Schaltfläche "Speichern + Neu" gedrückt wurde, Makro "SR_NE_Dia" ausführen.

Allerdings fehlt mir hierzu die Funktion wie ich ein anderes Makro aufrufe =(
Und ich weiss natürlich auch noch nicht, ob der Code, so wie ich mir das gedacht habe, überhaupt sinnvoll ist.

Ich bitte also daher um eure Unterstützung und bedanke mich schonmal ;)

Liebe Grüße,
dia
Zuletzt geändert von diamondialis am Fr, 30.11.2012 17:02, insgesamt 1-mal geändert.
diamondialis
*
Beiträge: 19
Registriert: Mo, 19.12.2011 22:24

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von diamondialis »

Hmm... das läuft wohl anders, als ich dachte.

Wenn den Schaltflächen eine "Art" zugewiesen ist, muss diese wohl abgefragt werden, damit überhaupt was passiert, kann das sein?

Wenn dem so ist, Wie muss ich dann mein Makro "SR_NEB_Local" umformulieren, damit es oben stehende Funktionen erfüllt?

Oder besser gefragt, wie kann ich oben beschriebenes am besten realisieren?

LG,
dia
Benutzeravatar
navy-cis
*
Beiträge: 12
Registriert: Mo, 26.01.2009 17:54

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von navy-cis »

Hi Diamondialis,

wenn ich Dich richtig verstanden habe, möchtest Du den Dialog mit lehren Eingabefeldern wieder anzeigen.

Wie wäre es damit, lass dein Makro alles Speichern und anschließend den Inhalt der Eingabefelder löschen.
Also ohne endexcute() und dispose()

LG n-cis
LG n-cis
diamondialis
*
Beiträge: 19
Registriert: Mo, 19.12.2011 22:24

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von diamondialis »

Hmm...

Ich will ja, dass wahlweise der Dialog nur gespeichert und dann geschlossen, oder aber gespeichert und neu aufgemacht wird, ob jetzt nur die Eigabefelder resettet werden, oder nicht ist eigendlich vollkommen egal.

Ich hab dafür ja 2 Buttons^^ Aber irgendwie muss ja mein Makro wissen, wie es auf welchen Button reagieren soll, oder nicht?

endexecute() und dispose() sind ja letzen Endes nur für die erste Variante gadacht.

Also müsste ja irgendwo im Makro vor diesen beiden Argumenten der Punkt sein, wo das Makro die "Quelle" des Signals zur Auslösung herbekommt, also entweder Button 1 "Speichern und Beenden" oder Button 2 "Speichern und Neu".

Deswegen hatte ich mir das ja so gedacht, wie es oben steht, also nach dem Motto...

1. ... Prozess zum Speicher der Daten aus dem Dialog ...
2. Abfrage Quelle
3. Wenn Quelle = Button 1, dann nur Speichern und Dialog schließen...
oder Wenn Quelle = Button 2, dann Speichern und Dialog resetten, oder w.a.i.

Evtl. so:

... Speichern ...
If
"Funktion zur Abfrage, welcher Button ausgelöst wurde" = Button 2
Then
NE_Dia.EndExecute()
Call SR_NE_Dia
End Sub
End If
NE_Dia.EndExecute()
NE_Dia.Dispose()
End Sub

Aber mir fehlen da halt eben die Funktionen =(
Wenn das so Sinn macht...

Wie bekomme ich heraus, welcher Button gedrückt wurde, und wie verarbeite ich das dann weiter?

LG,
dia
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von balu »

Hallo dia,

viele Wege führen zum Ziel, und einer könnte für dich vielleicht folgender sein, schau mal hier.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
navy-cis
*
Beiträge: 12
Registriert: Mo, 26.01.2009 17:54

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von navy-cis »

Hallo dia,

der Vorschlag von balu ist gut, den kannte ich auch noch nicht.

habe es mal ausprobiert mit Zusatzinformation (Tag) klappt super, wieder was gelernt.

LG
n-cis
LG n-cis
diamondialis
*
Beiträge: 19
Registriert: Mo, 19.12.2011 22:24

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von diamondialis »

Cool, vielen Dank!

Aber etwas Hilfe brauche ich dennoch.

So wie ich das verstanden habe, reagiert dieses Makro universal auf jedes Event.

Ist das Event jeder der Druck auf den Knopf, fragt das Makro den Zusatzinformations-Wert ab und verarbeitet ihn dann in der If-Funktion weiter.

Aber wie baue ich das jetzt in mein vorhandenes Makro ein, ohne es duplizieren zu müssen?

Denn aktuell versteh ich das so:

Code: Alles auswählen

Sub SR_NE_Dia_Bt (event)
    Dim Dia_NE_Bt_Tag as Boolean
    Dia_NE_Bt_Tag = event.source.model.tag
    If Dia_NE_Bt_Tag = save Then
        Call SR_NEB_Save
    Else
        Call SR_NEB_New
    EndIf
End Sub
Das würde aber bedeuten, dass ich einmal das Makro "SR_NEB_Save" brauche, das den Speicherprozess abhandelt und dann den Dialog schließt und einmal das Makro "SR_NEB_New", das ebenfalls den Speicherprozess abhandelt, aber dann im Anschluss den Dialog erneut öffnet, bzw. leert.
sprich:

Code: Alles auswählen

Sub SR_NEB_Save
...
...
NE_Dia.EndExecute()
End Sub
und

Code: Alles auswählen

Sub SR_NEB_New
...
...
NE_Dia.EndExecute()
Call SR_NE_Dia
EndSub
Aber kann ich das ganze nicht auch in einem einzigen Makro abhandeln?
Das wäre mir personlich viel lieber, da weniger Code, auch wenns nur Copy&Paste ist...

Sprich, ein Makro "SR_NEB_Local", dass erst den Speicherprozess abhandelt und dann basierend auf dem Zusatinformationswert eines gedrückten Buttons eben entscheidet ob der Dialog nur zu beenden, oder neu zu öffnen ist.

Es geht ja hier mehr ums Prinzip. bzw. die Möglichkeiten, denn ich könnte ja auch jedem Button ein extra Makro zuweisen... Das wäre aber zu einfach :P

LG,
dia
diamondialis
*
Beiträge: 19
Registriert: Mo, 19.12.2011 22:24

Re: Calc, Makro mit anderem Makro aufrufen

Beitrag von diamondialis »

Naja, ich hab jetzt vorerst mal letzere Variate genommen.
Ist auch nicht so verkehrt.

Makro "SR_NEB_Save" wird Button "Speichern" als Aktion zugeteil und "SR_NEB_New" wird Button "Speichern & Neu" zugeteilt, wobei "SR_NEB_New" nur aus

Code: Alles auswählen

Sub SR_NEB_New
Call SR_NEB_Save
Call SR_NE_Dia
End Sub
besteht ;)
Nicht sooooo elegant, aber funktioniert tadellos ;)

Rat- oder Vorschläge sind nach wie vor sehr willkommen, auch wenn ich mich derweilen um das nächste Problem kümmere ;)

LG,
dia
Antworten