Seite 1 von 1

Makro-Anfängerfrage

Verfasst: Mi 7. Aug 2013, 19:59
von wodim
Hallo,

ein Makro, das beim Öffnen eines Formlars aufgerufen wird:

Code: Alles auswählen

Sub FormOeffnen

    MsgBox "Fehler"

End Sub
Die Message kommt auch schon - abber wie jetzt weiter? ;) Ich will das aufrufende Formular als Objekt übergeben, und das Makro soll dann das erste Textfeld im Formular aktivieren (den Fokus darauf setzen).

Wie mache ich das? (Es gibt keine dummen Fragen.) Bin wohl nur ein bisschen von Visual Basic "verwöhnt". ;) (Damit habe ich einige Zeit programmiert, ist aber schon ein bisschen her.)

Ich vermisse diesbezügl. in LO z.B. sowas wie ein komplettes Basic-Sprachverzeichnis - oder hab' ich nur nicht die richtige Methode zum Suchen ...

Re: Makro-Anfängerfrage

Verfasst: Mi 7. Aug 2013, 20:05
von RobertG
Hallo wodim,

nimm zuerst einmal das Base-Handbuch. Da stehen für Base die naheliegendsten Dinge drin.
Dann kannst Du auch noch in der Hilfe
Inhalte → Makros und Programmierung
aufrufen.
Eine gute Einstiegsquelle war für mich auch immer
http://www.starbasicfaq.de/

... und noch eine kurze Ergänzung: Du kannst den Steuerelementfokus auch direkt einstellen. Den Formularnavigator aufrufen, im Kontextmenü des Hauptordners "Formulare" den "Automatischen Kontrollelementefocus" anklicken. Das mit dem niedrigsten Tabstop versehene Element sollte dann automatisch starten.

Gruß

Robert

Re: Makro-Anfängerfrage

Verfasst: Mi 7. Aug 2013, 20:52
von wodim
RobertG hat geschrieben:nimm zuerst einmal das Base-Handbuch.
Solche dicken Bücher hab' ich nicht (mehr). ;) Wozu auch - s. das große Fernziel der EDV "papierloses Büro". ;)
RobertG hat geschrieben:Dann kannst Du auch noch in der Hilfe
Inhalte → Makros und Programmierung
aufrufen.
Naja, das ist doch quasi das Spachverzeichnis, das ich suchte, danke! Aber naja, dass mein Makro so anfangen muss, ist mir aus meinen VB - Erinnerungen schon klar:

Code: Alles auswählen

Sub FormularOeffnen(variable As typ)
[...]
End Sub
In VB war das nun ganz einfach: In den Code des aufrufenden Formulars in die FormOpen() - Prozedur eingebaut:

Code: Alles auswählen

Sub FormOpen()

   FormularOeffnen(Me)

End Sub
Mit "Me" wird der Prozedur "FomularOeffnen" das aufrufende Formular als Objektvariable übergeben, und die kann dann das Formular und sämtliche Objekte darin "handeln", also im Fall "erstes Texfeld aktivieren" etwa so:

Code: Alles auswählen

Sub FormularOeffnen(frm As Form)

   frm.text1.setfocus

End Sub
Fertig. Sorry, wenn die Syntax "aus dem Gedächntnis" nicht mehr so stimmt - der VB-Editor (nicht erst der Interpreter/Compiler!) hat auch solche "Tippfehler" schon korrigiert wie: Es muss nicht "As Form" sondern "As Object" heißen und nicht "setfocus" sondern "SetFocus" - fragmichmal heute. ;)

Also nochmal meine "Anfängerfrage" für den Ansatz: Wie übergebe ich das aufrufende Formular als Objektvariable? (Schon gestartet wird das Makro ja anders als eine VB-Prozedur.)

Re: Makro-Anfängerfrage

Verfasst: Mi 7. Aug 2013, 21:26
von RobertG
Hallo wodim,
wodim hat geschrieben:
RobertG hat geschrieben:nimm zuerst einmal das Base-Handbuch.
Solche dicken Bücher hab' ich nicht (mehr). ;) Wozu auch - s. das große Fernziel der EDV "papierloses Büro". ;)
http://de.libreoffice.org/hilfe-kontakt/handbuecher/

Steht unter jedem meiner Postings - ich habe nicht große Lust, die jeweiligen Stellen aus dem Handbuch hier einfach noch einmal rein zu kopieren.
... und die Fokussierung kannst Du ohne Makros regeln - steht in dem vorangehenden Beitrag ...

Gruß

Robert

Re: Makro-Anfängerfrage

Verfasst: Do 8. Aug 2013, 08:02
von wodim
RobertG hat geschrieben:... und die Fokussierung kannst Du ohne Makros regeln - steht in dem vorangehenden Beitrag ...
Das hatte ich nicht gesehen, hast du sicher ergänzt, nachdem ich den Beitrag schon gelesen hatte.
RobertG hat geschrieben:... und noch eine kurze Ergänzung: Du kannst den Steuerelementfokus auch direkt einstellen. Den Formularnavigator aufrufen, im Kontextmenü des Hauptordners "Formulare" den "Automatischen Kontrollelementefocus" anklicken. Das mit dem niedrigsten Tabstop versehene Element sollte dann automatisch starten.
Tut es schon, danke. ;)
RobertG hat geschrieben:http://de.libreoffice.org/hilfe-kontakt/handbuecher/
Steht unter jedem meiner Postings - ich habe nicht große Lust, die jeweiligen Stellen aus dem Handbuch hier einfach noch einmal rein zu kopieren.
Sollst du auch nicht, danke für den Link. Aber egal ob nun Hunderte Seiten Papier oder Dateien - ich für meinen Teil kommuniziere lieber mit lebendigen Menschen. Und wennn da einer ist, der mal fix einen Tipp aus der Praxis geben kann - davon leben schließlich Foren wie dieses. Dafür heißt's ja "Community". ;)

Re: Makro-Anfängerfrage

Verfasst: Do 8. Aug 2013, 10:50
von gogo
eine kleine Hilfe zum Me-Objekt:

Das Me-Objekt ist eine sehr praktische Einführung von VB, allerdings ist es lediglich eine Sammlung verschiedener Objekte und Methoden, die zentral per Me. erreicht werden können. In LO/AOO gibt es dafür das Event. Die Prozeduren die durch ein Ereignis ("Dokument öffnen", "Aktion ausführen" etc.) gestartet werden, erhalten immer das Event-Objekt als ersten Parameter mit-übergeben. Man muss Ihm nur einen Namen geben, schon kann man darauf zugreifen. z.B.:

aus:

Code: Alles auswählen

Sub FormOpen()
...
End Sub
macht man einfach

Code: Alles auswählen

Sub FormOpen(oEvent)
...
End Sub
und schon kann man per oEvent. auf dessen Methoden und Properties zugreifen. Die wichtigste Property ist sicher .Source - sie verweist auf den Auslöser.

Wenn man also einen Button klickt, und damit die Prozedur

Code: Alles auswählen

Sub WieHeisseIch(oEvent)
msgbox oEvent.Source.Model.Name
End Sub
auslöst, dann bekommt man den Buttonnamen in einer MsgBox präsentiert.

Code: Alles auswählen

...
oEvent.Source.Model.Parent.reload
...
aktualisiert die Daten des zugrunde liegenden Formulars (.Parent)

Code: Alles auswählen

...
msgbox oEvent.Source.Model.Parent.getbyname("Textfeld1").CurrentValue
...
liest das aus was gerade im "Textfeld1" steht ...

Als Inspektions-Tool eignet sich Xray

Code: Alles auswählen

...
XRay(oEvent)
...
dann kannst Du genau sehen was das Event-Objekt kann und dich durch die Objekte hangeln bis Du dort bist wo Du hin willst.

Re: Makro-Anfängerfrage

Verfasst: Do 8. Aug 2013, 19:46
von wodim
Jou, danke, da bekommt man doch wieder Lust zum Basteln. ;)