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:[email protected]

--
Liste abmelden mit E-Mail an: [email protected]
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

Antwort per Email an