Herbers Excel-Forum - das Archiv
Anstelle Debugger den Fehler m.e. Meldung abfangen
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
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
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
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
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
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
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