Hallo zusammen,
sehr herzlichen Dank für Eure ultraschnellen Antworten auf meine
Fehlermeldung. Damit hatte ich nicht gerechnet, nachdem ich gelesen
hatte, dass bei einfachem Versand einer Mail ohne Beitritt zur
Mailingliste oft gar keine Antwort erfolgt. Um so mehr habe ich mich
über Eure Kommentare gefreut.
Und - in der Tat wären Code-Beispiele hilfreich gewesen - Entschuldigung!
Dies möchte ich nun nachholen:
Beispiel1:
--------------------------------------------------------------------------------------------------------------------
Sub Main
Dim a as integer
a = 1
On a GoSub marke1, marke2
Print "Ende"
Exit Sub
marke1:
Print "marke1"
Return
marke2:
Print "marke2"
Return
End Sub
--------------------------------------------------------------------------------------------------------------------
In diesem Beispiel wird bei a = 1 ebenso wie bei a = 2 jeweils die
korrekte Marke aufgerufen und der entsprechende Print-Befehl ausgeführt.
In beiden Fällen bricht das Makro jedoch beim 'Return' mit dem
beschriebenen Fehler "Zurück ohne GoSub" ab.
Um dem Fehler aus dem Weg zu gehen, verwende ich derzeit hilfsweise
anstelle des 'On a GoSub ...'-Befehls dies:
Select Case a
Case 1: GoSub marke1
Case 2: GoSub marke2
End Select
In diesem Fall funktionieren sowohl 'GoSub' als auch 'Return'
problemlos. Eine Lösung ist das allerdings höchstens vorübergehend.
Nachtrag:
Erst im Nachhinein erinnerte ich mich an eine mir schon seit Jahren
bekannte weitere Auffälligkeit mit 'Return', bei der ich allerdings
nicht weiß, ob sie mit dem oben genannten Fehler wirklich in
Zusammenhang steht. Auch dazu ein Beispiel:
Beispiel2:
--------------------------------------------------------------------------------------------------------------------
Sub Main
For a = 1 to 2
GoSub marke1
Next
Print "Ende"
Exit Sub
marke1:
Print "marke1"
If a = 1 Then Return
Print "a ist ungleich 1"
Print "marke1-Ende"
Return
End Sub
--------------------------------------------------------------------------------------------------------------------
Hier wird bei a = 1 in der 'If - Then' Anweisung von 'marke1' der
Return-Befehl anstandslos ausgeführt.
Bei a = 2 sollte man annehmen, dass nach dem dann nicht mehr
zutreffenden 'If' die darauf folgende dritte Zeile (Print "a ist
ungleich 1") ausgeführt wird. Dies ist jedoch nicht der Fall,
anscheinend weil der Interpreter diese Zeile einfach überspringt und
stattdessen mit der Folgezeile: Print "marke1-Ende" fortfährt.
Erstaunlich: Wird die 'If'-Zeile (syntaktisch unnötigerweise) mit einem
Doppelpunkt beendet, also: "If a = 1 Then Return:", tritt das
Überspringen nicht auf!
Habt Ihr dazu eine gute Idee? (Viel Spaß beim Knobeln :-) )
Jedenfalls kommt es mir sehr unwahrscheinlich vor, dass ich der Erste
sein soll, dem diese "Return-Probleme" aufgefallen sein sollen.
Liebe Grüße
Hans
PS: Hoffentlich habe ich hier den richtigen Weg eingeschlagen, um den
thread fortzusetzen (in den Anleitungen fand ich keinen diesbezüglichen
Hinweis).
--
Hans Lintzen
mail:hans.lintzen@t-online.de
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Context
- [de-users] Re: LibreOffice Calc Basic: Laufzeitfehler bei 'Return' nach 'On [var] GoSub [marke ...]' · Hans Lintzen
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.