#Fehler! per Makro (VBA) finden und behandeln
Zu schnell schleicht sich in eine Tabelle eine durch Excel generierte Fehlermeldung ein. Und manchmal soll die irgendwie „behandelt” werden. Damit ist nicht in jedem Fall gemeint, dass die Ursache bereinigt wird sondern auch die Möglichkeit, die Fehlermeldung einfach zu löschen.
Natürlich geht das nicht so „einfach mal eben”, denn der Fehler tritt ja wegen einer Formel oder einer Funktion auf, welche aufgrund der übergebenen Werte diese „Antwort” gibt. – Wie dem auch sei, angenommen der Fehler #DIV/0! soll einfach durch ""
(also einen LeerString) ersetzt werden, dann bietet sich zuerst folgendes an:
Sub Fehlerbereinigung_1() Dim c As Range For Each c In ActiveSheet.UsedRange If IsError(c) Then c = "" Next c End Sub
Das funktioniert auch so weit. Aber der „kleine” Nachteil: Jeder Fehler im Tabellenblatt wird dann so behandelt, nicht nur #DIV/0!. Der am ehesten zielführende Ausweg wäre beispielsweise dieser:
Sub Fehlerbereinigung_2() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Text = "#DIV/0!" Then c = "" Next c End Sub
Jetzt müsste schon durch einen ganz dummen Zufall in einer Zelle der TEXT und nicht die Fehlermeldung #DIV/0! stehen, wenn der falsche Zellinhalt gelöscht wird; und das ist höchst unwahrscheinlich.
Ich ergänze hier noch einmal den Code, um auch diesen unwahrscheinlichen Fall abzufangen und füge noch zwei weitere Fehlermöglichkeiten dazu:
Sub Fehlerbereinigung_3() Dim c As Range For Each c In ActiveSheet.UsedRange If IsError(c) Then Select Case c.Text Case "#DIV/0!" c = "" Case "#WERT!" c = "ZAHL erwartet!" Case "#NV" c = Null 'Wirklich leer, kein Text End Select End If Next c End Sub
Ich räume ein, dass Sie den Fehler auch über den Fehlercode des WorkSheetFunction – Objekts abfangen bzw. erfragen können, aber wer hat schon die ganzen numerischen Werte im Kopf. Da ist solch eine Lösung gewiss praktikabler und auf jeden Fall transparenter.
Die drei Code-Beispiele können Sie hier als *.zip-Datei herunter laden.
[NachObenLetzte Verweis=„MF| T&T: #Fehler! per VBA abfragen”]