Jetzt aber :-)
16.02.2004 16:14:59
Alex K.
Hallo Alexej,
also ein Fehler kann auftreten, wenn das Blatt berechnet wird. Also lösche meinen "alten" Code und verwende diesen Code (wieder in "DieseArbeitsmappe"). Dieser gibt bei JEDER Neuberechnung des Blattes die Meldungen aus.
Aber Vorsicht, damit kann es unter Umständen zu sehr vielen Fehlermeldungen kommen, wenn z.b. 100 Spalten in Abhängigkeit von einer Zelle berechnet werden. Wird nun in dieser Zelle ein Wert eingetragen, der zu Fehlern in den 100 Zellen führt, so wird 100x die Fehlermeldung ausgegeben. Deshalb hat der Anwender die Möglichkeit, vorher abzubrechen.
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim errText As String
Dim col As Long
Dim row As Long
Dim actCell As Range
Dim ret As Integer
With ActiveSheet
For col = 1 To .UsedRange.Columns.Count
For row = 1 To .Cells(.Rows.Count, col).End(xlUp).row
Set actCell = .Cells(row, col)
If Application.WorksheetFunction.IsError(actCell.Value) Then
Select Case LCase(actCell.Text)
Case "#name?": errText = "Eine Formel bzw. definierter Name für einen Zellbereich existiert nicht bzw. wurde falsch geschrieben"
Case "#div/0!": errText = "Eine Division durch 0 ist nicht erlaubt. Überprüfen sie bitte die Formel."
Case Else: errText = "Ein Fehler in einer Formel ist aufgetreten. Bitte überprüfen sie die Formel"
End Select
ret = MsgBox(errText & vbNewLine & "Fehler in Zelle: " & actCell.Address & _
vbNewLine & "Weiter nach Fehler suchen?", _
vbExclamation + vbYesNo, "Formelfehler")
If ret = vbNo Then
actCell.Activate
Exit Sub
End If
End If
Next row
Next col
End With
End Sub
Falls diese Möglichkeit dir auch nicht zusagt, so kopiere das folgende Makro in ein neues Modul (im VBA-Editor über Menü "Einfügen -> Modul). Du kannst dann das Makro auf einen Menübutton in einer Symbolleiste legen oder über einen Shortcut aufrufen lassen.
Private Sub Fehlersuche()
Dim errText As String
Dim col As Long
Dim row As Long
Dim actCell As Range
Dim ret As Integer
With ActiveSheet
For col = 1 To .UsedRange.Columns.Count
For row = 1 To .Cells(.Rows.Count, col).End(xlUp).row
Set actCell = .Cells(row, col)
If Application.WorksheetFunction.IsError(actCell.Value) Then
Select Case LCase(actCell.Text)
Case "#name?": errText = "Eine Formel bzw. definierter Name für einen Zellbereich existiert nicht bzw. wurde falsch geschrieben"
Case "#div/0!": errText = "Eine Division durch 0 ist nicht erlaubt. Überprüfen sie bitte die Formel."
Case Else: errText = "Ein Fehler in einer Formel ist aufgetreten. Bitte überprüfen sie die Formel"
End Select
ret = MsgBox(errText & vbNewLine & "Fehler in Zelle: " & actCell.Address & _
vbNewLine & "Weiter nach Fehler suchen?", _
vbExclamation + vbYesNo, "Formelfehler")
If ret = vbNo Then
actCell.Activate
Exit Sub
End If
End If
Next row
Next col
End With
End Sub