Mahlzeit.
Als ich mir das Makro von 'Marce Cz' (Marcel) so anschaute, kam mir das doch irgendwie etwas bekannt vor. Und richtig! Ich hatte ihm im Januar in diesem Thread:
Basic Synthaxfehler Else/Endif ohne if eine Datei samt Makro gegeben.
Warum ich das jetzt extra erwähne? Nur damit ihr wisst wer den "Grundstein" für das Makro verbrochen hat

.
Nun möchte ich aber doch etwas zum aktuellem Makro sagen.
Erstmal etwas generelles zu Marcel.
Nur damit Du mich nicht falsch verstehst. Es geht mir nur darum das Du etwas dazu lernst.
Wenn eine Datei mit Makro geladen, und anschließend das Makro gestartet wird, so wird das gesammte Makro von oben bis unten (von Anfang bis Ende) ersteinmal durchlaufen. Und wenn keine schweren Fehler auftreten, die dann auch angezeigt werden würden wie z.B. ein x-Beliebiges Wort oder Zeichen welches sich nicht in einer Sub befindet, erst dann wird das Makro komplett ausgeführt.
Bei diesem Prozess werden aber auch schon z.B. Variablennamen und Objekte in den Speicher mit aufgenommen. Das ist auch gut so. Nur muss man aufpassen das dies auch alles schön der reihe nach geht. Soll heißen, erst die die Variablendeklaration und dann die Variablendefenition, und dann kann man die Variablen weiter verarbeiten.
Die deklaration findet entweder ganz am Anfang außerhalb einer Sub statt, dann sind die Variablen Öffentlich. Oder sie werden in einer Sub deklariert, dann sind sie Lokal. Und die defenition findet immer in einer Sub statt. Und bei Makros mit Dialogen ist es doch sehr empfehlenswert das gleich nach der deklaration eine so genannte "Haupt-Sub" kommt in der die ganzen Variablen defeniert werden. Erst danach, nach der "Haupt-Sub", können und dürfen weitere Subs erstellt werden, die die defenierten Variablen verarbeiten.
Ich weise deshalb darauf hin, weil Du nicht diese Regel kennst, und schon dagegen verstoßen hast. Deine "Haupt-Sub" heißt bei dir: Sub EingabeDialog
Hier ist zu sehen was Du falsch gemacht hast.
Code: Alles auswählen
sub Weiter
[...]
end sub
Sub DatenEingeben
[...]
end sub
Sub EingabeDialog
iMonatsNamen = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
DialogLibraries.loadLibrary("Standard")
oDialogZeitenErfassen = CreateUnoDialog(DialogLibraries.Standard.DlgZeitenErfassen)
oMonatAuswaehlen = CreateUnoDialog(DialogLibraries.Standard.Monat)
oArbeit = oDialogZeitenErfassen.getControl("FrameControl1")
oArt = oDialogZeitenErfassen.getControl("FrameControl2")
oLohn = oDialogZeitenErfassen.getControl("FrameControl3")
oMonatsTitel = oDialogZeitenErfassen.getControl("Label2")
[...]
end sub
Besser, und richtig wäre aber diese Reihenfolge.
Code: Alles auswählen
Sub EingabeDialog
iMonatsNamen = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
DialogLibraries.loadLibrary("Standard")
oDialogZeitenErfassen = CreateUnoDialog(DialogLibraries.Standard.DlgZeitenErfassen)
oMonatAuswaehlen = CreateUnoDialog(DialogLibraries.Standard.Monat)
oArbeit = oDialogZeitenErfassen.getControl("FrameControl1")
oArt = oDialogZeitenErfassen.getControl("FrameControl2")
oLohn = oDialogZeitenErfassen.getControl("FrameControl3")
oMonatsTitel = oDialogZeitenErfassen.getControl("Label2")
[...]
end sub
sub Weiter
[...]
end sub
Sub DatenEingeben
[...]
end sub
Und ja ich weiß das das Makro trotzdem funktioniert. Aber besser ist es wenn man sich an bestimmte Regeln hält, denn sonst sucht man sich hinterher im Fehlerfalle einen Wolf.
warum speichert er meine Daten aus der FrameBox1 nicht in die entsprechende Zeile?
Schau dir doch mal bitte schön jeden einzelnen OptionButton bei "Zusatzinformationen" genau an.
Gruß
balu
Mahlzeit.
Als ich mir das Makro von 'Marce Cz' (Marcel) so anschaute, kam mir das doch irgendwie etwas bekannt vor. Und richtig! Ich hatte ihm im Januar in diesem Thread: [url=http://de.openoffice.info/viewtopic.php?f=18&t=63364]Basic Synthaxfehler Else/Endif ohne if[/url] eine Datei samt Makro gegeben.
Warum ich das jetzt extra erwähne? Nur damit ihr wisst wer den "Grundstein" für das Makro verbrochen hat :lol:.
Nun möchte ich aber doch etwas zum aktuellem Makro sagen.
Erstmal etwas generelles zu Marcel.
Nur damit Du mich nicht falsch verstehst. Es geht mir nur darum das Du etwas dazu lernst.
Wenn eine Datei mit Makro geladen, und anschließend das Makro gestartet wird, so wird das gesammte Makro von oben bis unten (von Anfang bis Ende) ersteinmal durchlaufen. Und wenn keine schweren Fehler auftreten, die dann auch angezeigt werden würden wie z.B. ein x-Beliebiges Wort oder Zeichen welches sich nicht in einer Sub befindet, erst dann wird das Makro komplett ausgeführt.
Bei diesem Prozess werden aber auch schon z.B. Variablennamen und Objekte in den Speicher mit aufgenommen. Das ist auch gut so. Nur muss man aufpassen das dies auch alles schön der reihe nach geht. Soll heißen, erst die die Variablendeklaration und dann die Variablendefenition, und dann kann man die Variablen weiter verarbeiten.
Die deklaration findet entweder ganz am Anfang außerhalb einer Sub statt, dann sind die Variablen Öffentlich. Oder sie werden in einer Sub deklariert, dann sind sie Lokal. Und die defenition findet immer in einer Sub statt. Und bei Makros mit Dialogen ist es doch sehr empfehlenswert das gleich nach der deklaration eine so genannte "Haupt-Sub" kommt in der die ganzen Variablen defeniert werden. Erst danach, nach der "Haupt-Sub", können und dürfen weitere Subs erstellt werden, die die defenierten Variablen verarbeiten.
Ich weise deshalb darauf hin, weil Du nicht diese Regel kennst, und schon dagegen verstoßen hast. Deine "Haupt-Sub" heißt bei dir: Sub EingabeDialog
Hier ist zu sehen was Du falsch gemacht hast.
[code]
sub Weiter
[...]
end sub
Sub DatenEingeben
[...]
end sub
Sub EingabeDialog
iMonatsNamen = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
DialogLibraries.loadLibrary("Standard")
oDialogZeitenErfassen = CreateUnoDialog(DialogLibraries.Standard.DlgZeitenErfassen)
oMonatAuswaehlen = CreateUnoDialog(DialogLibraries.Standard.Monat)
oArbeit = oDialogZeitenErfassen.getControl("FrameControl1")
oArt = oDialogZeitenErfassen.getControl("FrameControl2")
oLohn = oDialogZeitenErfassen.getControl("FrameControl3")
oMonatsTitel = oDialogZeitenErfassen.getControl("Label2")
[...]
end sub
[/code]
Besser, und richtig wäre aber diese Reihenfolge.
[code]
Sub EingabeDialog
iMonatsNamen = Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
DialogLibraries.loadLibrary("Standard")
oDialogZeitenErfassen = CreateUnoDialog(DialogLibraries.Standard.DlgZeitenErfassen)
oMonatAuswaehlen = CreateUnoDialog(DialogLibraries.Standard.Monat)
oArbeit = oDialogZeitenErfassen.getControl("FrameControl1")
oArt = oDialogZeitenErfassen.getControl("FrameControl2")
oLohn = oDialogZeitenErfassen.getControl("FrameControl3")
oMonatsTitel = oDialogZeitenErfassen.getControl("Label2")
[...]
end sub
sub Weiter
[...]
end sub
Sub DatenEingeben
[...]
end sub
[/code]
Und ja ich weiß das das Makro trotzdem funktioniert. Aber besser ist es wenn man sich an bestimmte Regeln hält, denn sonst sucht man sich hinterher im Fehlerfalle einen Wolf.
[quote]
warum speichert er meine Daten aus der FrameBox1 nicht in die entsprechende Zeile?
[/quote]
Schau dir doch mal bitte schön jeden einzelnen OptionButton bei "Zusatzinformationen" genau an.
Gruß
balu