Herbers Excel-Forum - das Archiv

Anstelle Debugger den Fehler m.e. Meldung abfangen

Bild

Betrifft: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Peter

Geschrieben am: 02.01.2007 13:21:52
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 <= 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
Bild

Betrifft: AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Andi

Geschrieben am: 02.01.2007 13:42:15
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
Bild

Betrifft: AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Peter
Geschrieben am: 02.01.2007 13:43:43
Hallo Andi
Herzlichen Dank für den Beitrag.
Ich werde das ausprobieren (bin gerade auf dem Sprung).
Peter
Bild

Betrifft: AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Daniel Eisert

Geschrieben am: 02.01.2007 16:39:21
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
Bild

Betrifft: AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Peter

Geschrieben am: 03.01.2007 11:09:27
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
Bild

Betrifft: AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Daniel Eisert

Geschrieben am: 03.01.2007 20:49:07
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

Bild

Betrifft: AW: Anstelle Debugger den Fehler m.e. Meldung abfangen
von: Peter
Geschrieben am: 04.01.2007 08:08:11
Hallo Daniel
Vielen Dank für die Rückmeldung.
Das werde ich umsetzen.
Gruss, Peter
 Bild
Excel-Beispiele zum Thema "Anstelle Debugger den Fehler m.e. Meldung abfangen"
Fehlermeldung #NV ausblenden Fehlermeldung abfangen
Fehler in Workbook_Open-Prozedur abfangen Fehlermeldung #DIV/0! verhindern
Fehler entfernen Fehlermeldung abfangen und in sequentielle Datei schreiben
Fortlaufende Suche unter Vermeidung eines Laufzeitfehlers VBA-Fehlermeldungen auflisten
Alle Zellen mit der #BEZUG!-Fehlermeldung auswählen Zahlenstring mit Formel auslesen und Fehlermeldung verhindern