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:
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
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
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 (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
Danke für die Erklärungen!