Seite 1 von 1

(gelöst) Basic: Makro universell einsetzen

Verfasst: Sa 4. Jun 2016, 09:34
von Freischreiber
Hallo!

Meine DB hat schon ein funktionierendes Makro, um per Knopfdruck eine Auftragsnummer des ersten Formulars zu nehmen und damit ein anderes Formular gefiltert nach der ausgelesenen Auftragsnummer zu öffnen.

Jetzt würde ich dieses Makro gerne mehrfach verwenden, u. a. auf einem Formular, das vier nebeneinander stehende Tabellen enthält, die alle so einen Button bekommen sollen: "Gehe zu Auftrag". Der Übersichtlichkeit halber würde ich gerne das schon bestehende Makro nehmen können.

Das klappt auch, aber nur, wenn das Formular der Ausgangstabelle "MainForm" heißt.
Grund ist wohl, daß im Makro diese Zeile steht:

Code: Alles auswählen

oformAuftraege = thisComponent.drawpage.forms.MainForm
Mich würde jetzt interessieren, ob man das allgemeiner formulieren könnte, so daß das Ausgangsformular nicht MainForm heißen muß, sondern jeden beliebigen Namen tragen kann. Im Formularnavigator ist der Knopf, der das Makro aufruft, ja bereits der richtigen Tabelle untergeordnet...

Gruß
Freischreiber

Re: Basic: Makro universell einsetzen

Verfasst: Sa 4. Jun 2016, 11:46
von gogo
Ändere die Definition des Makros auf:

Code: Alles auswählen

Sub Makroname(oEvent)
Dann entweder:
Trage in das Feld Zusatz des Buttons der das Makro aufruft den Namen des gewünschten Formulars ein ("FormularX")
Auf diesen Zusatz-String des Buttons kannst du im Makro dann mit oEvent.Source.Model.tag zugreifen.

Code: Alles auswählen

oformAuftraege = thisComponent.drawpage.forms.MainForm
ersetzt Du dann mit

Code: Alles auswählen

oformAuftraege = thisComponent.drawpage.forms.GetByName(oEvent.Source.Model.tag)
oder:
Der Button befindet sich wie Du sagtest ja in einem Formular, auf dieses kannst Du dann mit

Code: Alles auswählen

oformAuftraege = oEvent.Source.Model.Parent
zugreifen

Re: Basic: Makro universell einsetzen

Verfasst: Mo 6. Jun 2016, 09:20
von Freischreiber
Hallo gogo,

die zweite Lösung funktioniert gut! Sowas hat Robert mir schon mal in ein Makro geschrieben, aber als "oEvent as object". Und das Anwenden auf neue Probleme... bei mir... seufz.

Und die erste Lösung benutzt das Feld "Zusatzinformation" für einen Tag?? Hab ich mir ins Makro geschrieben, gut zu wissen...

Vielen Dank für die Tips!

Gruß
Freischreiber

Re: (gelöst) Basic: Makro universell einsetzen

Verfasst: Mo 6. Jun 2016, 16:20
von gogo
Moment - immer langsam mit den jungen Pferden:

Wenn man ein Makro an ein Event (Ereignis) koppelt, dann wird dieses Ereignis "Etwas" an das Makro übergeben um sich zu "indentifizieren".

Das "Etwas" wird immer übergeben und bis dato sind mir nur "Etwas" untergekommen die den Datentyp "Objekt" haben. Mit

Code: Alles auswählen

Sub Makroname(oEvent)
gibst Du dem "Etwas" nur einen Namen, damit Du auf das "Etwas" zugreifen kannst. Sinnvollerweise bezieht sich das "Etwas" immer irgendwie auf das auslösende Ereignis. (oEvent) generiert eine Variable vom Datentyp Variant, in die dann das Ereignis das "Etwas" füllt - also ein Objekt.
Ob man (oEvent) oder (oEvent as Object) oder (WasWeissIch) schreibt ist vollkommen egal.

ad "Tag": tag ist das englische Wort für Etikett oder Schildchen... Buttons in LO haben eine Property die .tag heisst - diese dient nichts besonderem, ausser dass sie einen x-beliebigen String speichern kann, den man parktischerweise direkt im Formular eingeben kann. Dazu einfach den gewünschten Text in das Feld "Zusatzinformation" des buttons eingeben und speichern. Die .tag-Property mach gar nichts, aber den String kann man ja bei jedem Button ändern, so kann man dann wie im Handbuch sehr gut beschrieben ist "denselben" Button für unterschiedliche Befehle verwenden:

Code: Alles auswählen

select case oButton.tag
case "Fromular 1"
   call Formular_1_oeffnen
case else
	msgbox "Fehler! Die .tag-Eigenschaft dieses Buttons ist nicht richtig eingestellt!"
end select
... und ähnlichen Blödsinn.

Re: (gelöst) Basic: Makro universell einsetzen

Verfasst: Mo 6. Jun 2016, 17:44
von Freischreiber
Ob man (oEvent) oder (oEvent as Object) oder (WasWeissIch) schreibt ist vollkommen egal.
Das hab ich ja noch verstanden - "as object" ist dann also nur zur Klarstellung? Und auch "(oEvent)" ist nur ein Name, da könnte man auch "(Ereignis)" schreiben?

Aber was ist denn das Ereignis? Das, was beim Button als Ereignis das Makro auslöst? Das Drücken des Buttons durch die Maustaste?
Und "parent" ist dann das Formular, in dem der Button gedrückt wurde - und nicht das Nachbarformular?

tag ist das englische Wort für Etikett oder Schildchen
Das war mir klar, auch wenn ich es groß geschrieben hatte. Es war mir nur neu, daß man Buttons taggen kann. Weil eben Handbücher lesen nicht meine Stärke ist.

Re: (gelöst) Basic: Makro universell einsetzen

Verfasst: Mo 6. Jun 2016, 19:25
von gogo
Freischreiber hat geschrieben:... "as object" ist dann also nur zur Klarstellung? ...
auch um nur ein Objekt zu akzeptieren - löst dann aber auch einen Fehler aus, wenn's keines ist - je nach Geschmack ;)
Freischreiber hat geschrieben:... Und auch "(oEvent)" ist nur ein Name, da könnte man auch "(Ereignis)" schreiben?
exakt.
Freischreiber hat geschrieben: ... Aber was ist denn das Ereignis? Das, was beim Button als Ereignis das Makro auslöst? Das Drücken des Buttons durch die Maustaste?
ja
Freischreiber hat geschrieben:Und "parent" ist dann das Formular, in dem der Button gedrückt wurde - und nicht das Nachbarformular?
ja, das Formular in dem sich das Button-Kontrollelement befindet.
Zur Erklärung:
Unbenannt.png
Unbenannt.png (132.54 KiB) 3144 mal betrachtet
... falls es ein SubForm gibt und der Button da drin ist.
Freischreiber hat geschrieben: ... Weil eben Handbücher lesen nicht meine Stärke ist.
jetzt kommt eh' die EM, bei den langweiligen Spielen kannst Du Dir das Handbuch durchsehen - da ist immer wieder was neues drin.

Re: (gelöst) Basic: Makro universell einsetzen

Verfasst: Di 7. Jun 2016, 16:29
von Freischreiber
:lol:

Danke für die Erklärungen!