Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mit gecallter Sub kompl. Sub beenden

Forumthread: mit gecallter Sub kompl. Sub beenden

mit gecallter Sub kompl. Sub beenden
24.04.2020 10:40:11
Ivan
Servus zusammen,
folgendes Problem quält mich.
Ich rufe aus einer übergeordneten Sub, die an einem Knopf angebunden ist, mehrere kleine Subs auf.
Sub aufruf()
Call AutomatischesEinfuellendesNamens
Application.ScreenUpdating = False
Call SchleifeOrdnerDokumente("NeuesRelease")
Call texte_einfügen
Application.ScreenUpdating = True
MsgBox ("Die Dokumentation wurde erfolgreich angelegt")
End Sub
Dabei wird in der fettgedruckten Sub, diese abgebrochen, wenn man in eine Inputbox "n" eingibt.
Sub AutomatischesEinfuellendesNamens()
Dim x, lstrVerz, abgetrennt, Nameabgetrennt As String
Dim Laenge, Laenge, Laengegesamt As Long
lstrVerz = Dir(Verzeichnis) & "*", vbDirectory)
 If lstrVerz = "" Then
x = InputBox("XXXnicht gefunden! Bitte den Namen eingeben oder mit n abbrechen")
If x = "n" Then
MsgBox ("Vorgang abgebrochen")

Else
ActiveWorkbook.Sheets("Eingabefenster").Range("B18") = (x)
GoTo Überspringen
End If
Else
Laenge = Len(lstrVerz)
LaengePRJ = Len(Left(lstrVerz, InStr(1, lstrVerz, " ")))
Laengegesamt = Laenge - Laenge
Nameabgetrennt = Right(lstrVerz, Laengegesamt)
ActiveWorkbook.Sheets("Eingabefenster").Range("B18") = Nameabgetrennt
Überspringen:
End If
End Sub
Wie schaffe ich es, dass man aus der gecallten Sub die komplette Sub abbrechen kann?
VG
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit gecallter Sub kompl. Sub beenden
24.04.2020 10:51:15
onur

If x = "n" Then
MsgBox ("Vorgang abgebrochen")
Ex=True
Exit Sub
Else
...

Und in der Hauptsub:
Sub aufruf()
Call AutomatischesEinfuellendesNamens
If Ex Then Exit Sub
...

Und in einem Modul:
Public Ex as Boolean

Anzeige
AW: mit gecallter Sub kompl. Sub beenden
24.04.2020 10:55:45
Daniel
Hi
Gibt zwei Möglichkeiten
a) du kannst mit dem Befehl END den kompletten Makrolauf sofort beenden. Das stoppt alle Makros und setzt auch eventuell vorhandene Statische oder "globale" Variablen zurück
b) schreibe die aufgerufene Sub um in eine Funktion, welche bspw den Wert True zurück gibt wenn abgebrochen werden soll und Frage dies im aufrufenden Makro ab. Diese Abfrage ist auch gleichzeitig der Aufruf zur Ausführung.
Function AutomatischesEinfuellendesNamens() as boolean
Dim x, lstrVerz, abgetrennt, Nameabgetrennt As String
Dim Laenge, Laenge, Laengegesamt As Long
lstrVerz = Dir(Verzeichnis) & "*", vbDirectory)
If lstrVerz = "" Then
x = InputBox("XXXnicht gefunden! Bitte den Namen eingeben oder mit n abbrechen")
If x = "n" Then
MsgBox ("Vorgang abgebrochen")
AutomatischesEinfuellendesNamens = True
Exit Function
Else
ActiveWorkbook.Sheets("Eingabefenster").Range("B18") = (x)
GoTo Überspringen
End If
Else
Laenge = Len(lstrVerz)
LaengePRJ = Len(Left(lstrVerz, InStr(1, lstrVerz, " ")))
Laengegesamt = Laenge - Laenge
Nameabgetrennt = Right(lstrVerz, Laengegesamt)
ActiveWorkbook.Sheets("Eingabefenster").Range("B18") = Nameabgetrennt
Überspringen:
End If
End Sub
Sub aufruf()
If AutomatischesEinfuellendesNamens then Exit Sub
...
Gruß Daniel
Anzeige
AW: mit gecallter Sub kompl. Sub beenden
24.04.2020 11:16:14
Ivan
GEIL!
Danke an euch beide!!!
;
Anzeige
Anzeige

Infobox / Tutorial

Sub aus einer anderen Sub in VBA beenden


Schritt-für-Schritt-Anleitung

Wenn Du eine Subroutine in VBA hast, die von einer anderen Sub aufgerufen wird, und Du möchtest, dass die aufgerufene Sub terminieren kann, wenn eine bestimmte Bedingung erfüllt ist, kannst Du dies folgendermaßen umsetzen:

  1. Erstelle eine öffentliche Variable: Definiere eine öffentliche Boolean-Variable, die den Status der Abbruchbedingung speichert.

    Public Ex As Boolean
  2. Modifiziere die aufgerufene Sub: Füge in der Sub, die Du aufrufst, eine Bedingung hinzu, um die Variable zu setzen und die Sub zu beenden.

    Sub AutomatischesEinfuellendesNamens()
       Dim x As String
       x = InputBox("Bitte den Namen eingeben oder mit n abbrechen")
       If x = "n" Then
           MsgBox ("Vorgang abgebrochen")
           Ex = True
           Exit Sub
       End If
       ' Weitere Logik hier...
    End Sub
  3. Überprüfe die Variable in der aufrufenden Sub: Bevor Du mit der nächsten Logik fortfährst, prüfe den Status der Variable.

    Sub aufruf()
       Call AutomatischesEinfuellendesNamens
       If Ex Then Exit Sub
       ' Weitere Logik hier...
    End Sub

Mit dieser Methode kannst Du sicherstellen, dass ein Excel-Vorgang abgebrochen wird, wenn die Bedingung in der aufgerufenen Sub erfüllt ist.


Häufige Fehler und Lösungen

  • Fehler: Die Variable Ex ist nicht definiert.

    • Lösung: Stelle sicher, dass die Variable als Public deklariert ist, damit sie von allen Subs aus zugänglich ist.
  • Fehler: Die Eingabe wird nicht korrekt verarbeitet.

    • Lösung: Überprüfe, ob die Eingabe in der InputBox richtig erfasst wird. Achte darauf, dass der Vergleich korrekt durchgeführt wird (z.B. If x = "n").

Alternative Methoden

  1. Verwendung von Funktionen: Anstatt eine Sub zu verwenden, kannst Du die aufgerufene Sub in eine Funktion umwandeln, die einen Boolean-Wert zurückgibt. So bekommst Du den Status des Abbruchs direkt zurück.

    Function AutomatischesEinfuellendesNamens() As Boolean
       ' Logik hier...
       If x = "n" Then
           AutomatischesEinfuellendesNamens = True
           Exit Function
       End If
       AutomatischesEinfuellendesNamens = False
    End Function
  2. Verwendung des End-Befehls: Wenn Du alle Makros sofort beenden möchtest, kannst Du den End-Befehl verwenden. Dies sollte jedoch mit Vorsicht eingesetzt werden, da er alle Variablen zurücksetzt.

    If x = "n" Then
       MsgBox ("Vorgang abgebrochen")
       End
    End If

Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Du eine Sub beenden kannst, wenn eine bestimmte Bedingung erfüllt ist:

Public Ex As Boolean

Sub aufruf()
    Call AutomatischesEinfuellendesNamens
    If Ex Then Exit Sub
    MsgBox ("Der Vorgang wurde erfolgreich abgeschlossen.")
End Sub

Sub AutomatischesEinfuellendesNamens()
    Dim x As String
    x = InputBox("Bitte den Namen eingeben oder mit n abbrechen")
    If x = "n" Then
        MsgBox ("Vorgang abgebrochen")
        Ex = True
        Exit Sub
    End If
End Sub

In diesem Beispiel wird die Sub aufruf die AutomatischesEinfuellendesNamens Sub aufrufen und entsprechend den Status der Variable Ex prüfen.


Tipps für Profis

  • Verwende globale Variablen sparsam: Halte den Code sauber, indem Du versuchst, globale Variablen nur dann zu verwenden, wenn es wirklich notwendig ist.
  • Fehlerbehandlung einbauen: Implementiere Fehlerbehandlungsroutinen, um unerwartete Fehler im Code zu vermeiden.
  • Dokumentiere Deinen Code: Kommentiere wichtige Abschnitte, um die Lesbarkeit zu erhöhen und zukünftige Änderungen zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich eine laufende Sub sofort beenden?
Du kannst den End-Befehl verwenden, um alle laufenden Makros sofort zu stoppen, aber beachte, dass dies auch alle Variablen zurücksetzt.

2. Gibt es eine Möglichkeit, eine Sub ohne globale Variablen zu beenden?
Ja, indem Du die aufgerufene Sub in eine Funktion umwandelst, die einen Boolean-Wert zurückgibt. So kannst Du den Status direkt abfragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige