>> Ich habe schon öfter gehört, dass man Sprungmarken wie "On Error Goto .." wirklich vermeiden soll
Vermeiden heißt nicht zwingend, dass man sie nicht nutzen darf.
Es kommt auf das "Wie" an - "Wie setzt man Sprungmarken richtig ein".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | Option Explicit
Public Sub Beispiel01()
Randomize Timer
Dim t As Double
Dim erg As Double
t = Math.Round(Rnd())
On Error Resume Next
erg = 815 / t
If CBool (Err.Number) Then
Call MsgBox(Err.Description, vbCritical, "Laufzeitfehler " & Err.Number)
Exit Sub
End If
erg = erg * 1.25
Call MsgBox( "Berechnung erfolgreich ausgeführt." , vbInformation, "Fertig" )
End Sub
Public Sub Beispiel02()
Randomize Timer
On Error GoTo ErrHandler
Dim t As Double
Dim erg As Double
t = Math.Round(Rnd())
erg = 815 / t
erg = erg * 1.25
Call MsgBox( "Berechnung erfolgreich ausgeführt." , vbInformation, "Fertig" )
Exit Sub
ErrHandler:
Call MsgBox( "ErrHandler: " & vbNewLine & Err.Description, vbCritical, "Laufzeitfehler " & Err.Number)
End Sub
|
Die obigen Beispiele zeigen den korrekten Umgang mit "On Error...".
Das wovon du gelesen hast bezieht sich ehern auf sogenannten "Spagetticode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Option Explicit
Sub Spagetticode()
Randomize Timer
Dim erg As Double
Step01:
erg = erg + (100 - 1) * Rnd() + 1
DoEvents
Step03:
If erg < 65.75 Then GoTo Step01
erg = erg / 2
Step08:
If erg > 55.25 Then GoTo Step03
Call MsgBox( "erg = " & Round(erg, 4), Title:= "Fertig" )
End Sub
|
Hier erkennt man nur schwer den Ablauf (und auch den Sinn) des Algorithmus. Unter anderem gilt es deshalb heute als verboten. Diese Sprunganweisungen rühren noch aus den Anfängen der Programmierung her (in Maschinen(nahe)sprachen auch heute noch aktuell). In inzwischen veralteten Sprachen war das die übliche Möglichkeit Code so zu organisieren, dass es halbwegs übersichtlich bleibt (Codeblöcke). Diese Möglichkeit damit zu arbeiten hat sich bis heute (Gründe seien mal dahingestellt) weiter in Programmiersprachen gehalten, jedoch bieten moderne Sprachen inzwischen weitaus bessere Lösungsmöglichkeiten an.
Grüße
|