Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

An Nepumuk - Stopp Befehl als Alternative

Betrifft: An Nepumuk - Stopp Befehl als Alternative von: Adis
Geschrieben am: 30.07.2014 13:40:34

ein persönliches Hallo an Nepumuk

ıch habe im Internet von MS nachgeschasut und muss zugeben, es hat mich berührt.
Der End Befehl hat wirklich böse Tücken. Er stoppt alle Makros, alle Programme.

Ich gebe offen zu das ich es nicht gewusst habe, dann hätte ich ihn nicht verwendet. Ich entschuldige mich in aller Form, wenn das zu einem Programmabsturz geführt hat.

Meine Frage ist: Stop Befehl als Alternative (Exit Sub ist mir bekannt)

Sie schrieben das der Stop Befehl ein Programm stoppt. Gibt es dabei Nebenwirkungen?
Bleibt das Programm gestoppt? Oder wird es durch ein Ereignis wie zB Taste drücken erneut gestartet? Es wäre ja ein sinnvolle Alternative zum End Befehl, wenn man sein Makro beenden (abbrechen) will, damit es nicht ins aufrufende Programm zurückkehrt!
Bevor ich da wieder einen Fehler mache frage ich lieber mal einen Experten

Gruss Adis

  

Betrifft: AW: An Nepumuk - Stopp Befehl als Alternative von: Rudi Maintaire
Geschrieben am: 30.07.2014 13:53:50

Hallo,
Stop unterbricht die Ausführung nur, der Code bleibt also mittendrin hängen.
Eine Alternative ist die Übergabe eines Parameters an die untergeordneten Subs, der nach Rückkehr ausgewertet wird.

Sub Makro1()
  Dim bolEnd As Boolean
  Makro2 bolEnd
  If bolEnd Then Exit Sub
  Makro3 bolEnd
  If bolEnd Then Exit Sub
  Makro4
End Sub

Sub Makro2(bolEnd As Boolean)
  bolEnd = MsgBox("beenden?", vbYesNo) = vbYes
End Sub

Sub Makro3(bolEnd As Boolean)
  bolEnd = MsgBox("jetzt beenden?", vbYesNo) = vbYes
End Sub

Sub Makro4()
  MsgBox "HuHu"
End Sub

Gruß
Rudi


  

Betrifft: AW: An Nepumuk - Stopp Befehl als Alternative von: Nepumuk
Geschrieben am: 30.07.2014 18:07:19

Hallo Adis,

Exit Sub mitten im Code macht man nur, wenn es nicht anders geht.

Public Sub Test1() 'So nicht
    If Cells(1, 1).Value <> 1 Then Exit Sub
    'Weiterer Code
End Sub

Public Sub Test2() 'So besser
    If Cells(1, 1).Value = 1 Then
        'Weiterer Code
    End If
End Sub


Test1 ist sogenannter Spagetticode, Test2 strukturierte Programmierung.

Das war es auch was ich an deinem Code bemängelt habe, denn das macht das Ganze sehr unübersichtlich.

Gruß
Nepumuk


  

Betrifft: AW: An Nepumuk - Stopp Befehl als Alternative von: Daniel
Geschrieben am: 30.07.2014 19:15:59

Naja das mit dem Exit Sub = unübersichtlicher Spaghetti-Code würde ich so pauschal mal nicht stehen lassen.

ein.

Sub Test
If Bedingung Then Exit Sub
...
1000 Zeilen Code
...
End Sub

ist wahrscheinlich übersichtlicher als
Sub Test
If Bedingung Then
    ...
    1000 Zeilen Code
    ...
end If
end Sub
ebenso kritisch, wenn die Abbruchbedingung in einer mehrfach verschachtelten Schleife steckt.
Wenn man hier ohne Exit Sub mitten drin einen Abbruch erzeugen will, wirds aufwendig.

Aufpassen muss man bei einem Exit Sub mitten im Code jedoch, wenn man Einstellungen in Excel verändert, wie wieder rückgängig gemacht werden sollten (Application.EnableEvents, Application.Calculation).
Sowas wird dann gerne vergessen.

Gruß Daniel


  

Betrifft: AW: An Nepumuk - Stopp Befehl als Alternative von: Adis
Geschrieben am: 30.07.2014 19:28:13

Danke an alle

ich denke Programmieren hat etwas mit Lernerfahrung und persönlicher Handschrift zu tun.
Man verwendet bevorzugt das was man gelernt hat und entwickelt im Lauf der Zeit seinen eigenen Stil.

Beispiel Autofahren: (oder Raucher)
wer gelernt hat die Kupplung schleifen zu lassen wird sich das nur schwer abgewöhnen.
Mein Makro Wissen stammt aus Data Becker Zeit von einer 31/2 Zoll Beispiel Diskette.

Gruss Adis


  

Betrifft: AW: An Nepumuk - Stopp Befehl als Alternative von: Nepumuk
Geschrieben am: 30.07.2014 20:08:33

Hallo Daniel,

ich habe keine Prozedur mit 1.000 Zeilen. Im Höchstfall sind es 100 und da fange ich schon an Aufzuteilen, wenn es geht. Ist auch besser um Fehler schneller einzugrenzen.

Bei ineinander verschachtelten Schleifen mache ich das auch. Ich schrieb ja, wenn es nicht anders geht oder besser gesagt, wo es einen erheblichen Aufwand bedeutet.

Gruß
Nepumuk


  

Betrifft: AW: An Nepumuk - Stopp Befehl als Alternative von: Daniel
Geschrieben am: 30.07.2014 20:26:44

Auch bei kurzen Prozeduren finde ich das:

IF Bediungung Then Exit Sub
übersichtlicher
als
IF Bediungung Then
...
End if
insbesondere, wenn die Prüfungen zuerst gemacht werden und es mehrere gibt (kommt Eventmakros wie Change/SelectionChange/BeforeDoubleClick öfters vor).

Gruß Daniel


  

Betrifft: Da hast du vollkommen recht, ... von: Luc:-?
Geschrieben am: 30.07.2014 21:02:08

…Daniel,
denn echter „Spaghetti-Code“ sieht ganz anders aus: Immer wieder irgendwo was ergänzt und dann wild rauf und runter gesprungen oder auch noch ganze Blöcke xfach eingefügt, worüber man sich dann bei auftretenden Fehlern bzw Änderungen besonders freuen darf. Ich habe da schon Grauenvolles gesehen und das dann wirklich über Tsd(e) Zeilen…
Ich finde, es wird zu oft und zu unrecht mit „Nudelgerichten“ gedroht, viell ja auch, weil (C-)Kids die so mögen, Pasta…! ;-))
Gruß, Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema "An Nepumuk - Stopp Befehl als Alternative"