Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anstelle Debugger den Fehler m.e. Meldung abfangen

Forumthread: Anstelle Debugger den Fehler m.e. Meldung abfangen

Anstelle Debugger den Fehler m.e. Meldung abfangen
02.01.2007 13:21:52
Peter
Guten Tag
In einem Makro frage ich für Spalte D aus einem Lookuptable Werte ab. Wenn nun der Suchwert nicht gefunden wird, kommt so logischerweise der Debugger.
Wie kann ich den Code ergänzen, damit bein Auftreten des Fehlers die Meldung erscheint, welche Zelle das Problem verursacht hat? Also beispielsweise, wenn der Fehler auftritt, wenn zNr auf 29 ist, sollte die Meldung erscheinen, "Wert für D29 ist im Lookuptable nicht definiert". Die Meldung sollte dann mit OK quittiert werden können.
Danke für ein Feedback.
Peter
zNr = 2
Do While zNr &lt= BW_Diff
If .Cells(zNr, 4) = "" And Len(.Cells(zNr, 5)) &lt 6 Then
.Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
Else
End If
zNr = zNr + 1
Loop
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
02.01.2007 13:42:15
Andi
Hi,
wenn das Makro nach der Meldung abbrechen soll, dann geht das so:

Sub t()
On Error GoTo errorhandler
zNr = 2
Do While zNr <= BW_Diff
If .Cells(zNr, 4) = "" And Len(.Cells(zNr, 5)) < 6 Then
.Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
Else
End If
zNr = zNr + 1
Loop
Exit Sub
errorhandler:
MsgBox "Wert für D" & CStr(zNr) & "ist im Lookuptable nicht definiert"
End Sub

Wenn nach der Meldung in der nächsten Zeile weitergemacht werden soll, dann so:

Sub t()
On Error GoTo errorhandler
zNr = 2
Do While zNr <= BW_Diff
If .Cells(zNr, 4) = "" And Len(.Cells(zNr, 5)) < 6 Then
.Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
Else
End If
zNr = zNr + 1
Loop
Exit Sub
errorhandler:
MsgBox "Wert für D" & CStr(zNr) & "ist im Lookuptable nicht definiert"
Resume Next
End Sub

Schönen Gruß,
Andi
Anzeige
AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
02.01.2007 13:43:43
Peter
Hallo Andi
Herzlichen Dank für den Beitrag.
Ich werde das ausprobieren (bin gerade auf dem Sprung).
Peter
AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
Daniel
Hallo
alternative zu "on Error goto" gäbs die Methode, das Vorhandensein des Wertes vorher mit einer Funktion abzufragen, die keinen Fehler erzeugt und dann entsprechend zu reagieren.
Mögllich wäre da zum Beispiel "Worksheetfunction.CountIf"
anstelle der Zeile mit Worksheetfunction.Vlookup fügst du ein:

select case worksheetfunction.countif(Range("KontoISIN"), Val(.Cells(zNr, 5)))
case 0
Msgbox "Wert nicht gefunden"
case 1
.Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
case else
msgbox "Wert mehrfach vorhanden"
end select

zusätzlich könnte es auch sinnvoll sein, die Fehlermeldungen in einem Textstring zu sammeln, um sie erst nach durchlauf anzeigen zu lassen (dann mußt du bei längerm durchlauf nicht ständig vorm Bildschirm sitzten)
Gruß, Daniel
Anzeige
AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
03.01.2007 11:09:27
Peter
Hallo Daniel
Vielen Dank für deinen Beitrag mit dieser Alternative.
Du erwähnst am Schluss, dass es auch sinnvoll sein könne, die Fehlermeldungen in einem Textstring zu sammeln, um sie erst nach durchlauf anzeigen zu lassen. Das ist wirklich so. Aber ich habe keine Ahnung, wie so etwas zu bewerkstelligen wäre.
Könntest du mir allenfalls dazu noch eine Hilfestellung geben?
Danke und freundlicher Gruss
Peter
Anzeige
AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
03.01.2007 20:49:07
Daniel
Hallo

Sub xxx
Dim Fehlertext as string
... Start Schleife
select case worksheetfunction.countif(Range("KontoISIN"), Val(.Cells(zNr, 5)))
case 0
Fehlertext = Fehlertext & Chr(10) & "Wert " & Val(.Cells(zNr, 5)) & " aus Zeile " & zNr & " fehlt"
case 1
.Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
case else
Fehlertext = Fehlertext & Chr(10) & "Wert " & Val(.Cells(zNr, 5)) & " aus Zeile " & zNr & " ist mehrfach in Liste vorhanden"
end select
... Schleifenende
Msgbox Fehlertext
End Sub
Gruß, Daniel

Anzeige
AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
04.01.2007 08:08:11
Peter
Hallo Daniel
Vielen Dank für die Rückmeldung.
Das werde ich umsetzen.
Gruss, Peter
;
Anzeige
Anzeige

Infobox / Tutorial

Fehler in Excel-Makros abfangen und melden


Schritt-für-Schritt-Anleitung

Um Fehler in Excel-Makros abzufangen, kannst du die Fehlerbehandlungsroutine On Error GoTo nutzen. Hier ist ein einfaches Beispiel, wie du dies umsetzen kannst:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu.
  3. Kopiere den folgenden Code und passe ihn an deine Bedürfnisse an:
Sub FehlerAbfangen()
    On Error GoTo errorhandler
    Dim zNr As Integer
    zNr = 2
    Do While zNr <= BW_Diff
        If .Cells(zNr, 4) = "" And Len(.Cells(zNr, 5)) < 6 Then
            .Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
        End If
        zNr = zNr + 1
    Loop
    Exit Sub
errorhandler:
    MsgBox "Wert für D" & CStr(zNr) & " ist im Lookuptable nicht definiert."
End Sub
  1. Führe das Makro aus. Bei einem Fehler wird eine Meldung angezeigt, die dir hilft, das Problem zu identifizieren.

Häufige Fehler und Lösungen

  1. Fehler: "Typen sind inkompatibel"

    • Lösung: Überprüfe, ob die Werte, die du abfragst, den richtigen Datentyp haben.
  2. Fehler: "VLookup nicht gefunden"

    • Lösung: Stelle sicher, dass der gesuchte Wert tatsächlich im Lookuptable vorhanden ist. Nutze WorksheetFunction.CountIf, um die Existenz des Wertes im Vorfeld zu prüfen.

Alternative Methoden

Anstelle der On Error GoTo Methode kannst du auch eine Vorabprüfung auf das Vorhandensein eines Wertes im Lookuptable durchführen. Hier ist ein Beispiel:

Select Case WorksheetFunction.CountIf(Range("KontoISIN"), Val(.Cells(zNr, 5)))
    Case 0
        MsgBox "Wert nicht gefunden"
    Case 1
        .Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
    Case Else
        MsgBox "Wert mehrfach vorhanden"
End Select

Diese Methode erlaubt es dir, Fehler schon im Vorfeld zu vermeiden und die Benutzerfreundlichkeit deiner Makros zu verbessern.


Praktische Beispiele

Hier ist ein erweitertes Beispiel, das die gesammelten Fehlermeldungen in einem String speichert und am Ende der Ausführung anzeigt:

Sub FehlerSammlung()
    Dim Fehlertext As String
    Dim zNr As Integer
    zNr = 2
    Do While zNr <= BW_Diff
        Select Case WorksheetFunction.CountIf(Range("KontoISIN"), Val(.Cells(zNr, 5)))
            Case 0
                Fehlertext = Fehlertext & Chr(10) & "Wert " & Val(.Cells(zNr, 5)) & " aus Zeile " & zNr & " fehlt."
            Case 1
                .Cells(zNr, 4) = WorksheetFunction.VLookup(Val(.Cells(zNr, 5)), Range("KontoISIN"), 2, 0)
            Case Else
                Fehlertext = Fehlertext & Chr(10) & "Wert " & Val(.Cells(zNr, 5)) & " aus Zeile " & zNr & " ist mehrfach in Liste vorhanden."
        End Select
        zNr = zNr + 1
    Loop
    If Len(Fehlertext) > 0 Then
        MsgBox Fehlertext
    End If
End Sub

Mit dieser Methode kannst du alle Fehler auf einmal anzeigen, was die Analyse erleichtert.


Tipps für Profis

  • Nutze den Excel Debugger, um den Code Zeile für Zeile zu überprüfen. Dies hilft dir, Probleme schneller zu identifizieren.
  • Halte deine Makros modular, indem du häufig verwendete Funktionen in separate Subroutinen auslagerst.
  • Dokumentiere deinen Code mit Kommentaren, um die Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie öffne ich den Excel Debugger? Um den Excel Debugger zu öffnen, drücke im VBA-Editor F8, um den Code Schritt für Schritt auszuführen.

2. Was sind die Vorteile der Vorabprüfung mit CountIf? Die Verwendung von CountIf vermeidet Fehler, die das Makro zum Abbrechen bringen könnten, und verbessert die Benutzererfahrung, indem sie klare Rückmeldungen gibt.

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