2017-11-29 2 views
0

Der folgende Code-Auszug soll den Stil einer Zelle in "Bad" ändern, wenn die Zelle einen Formelfehler "#REF!" und die Zelle 3 Spalten dazu hat kein "Gesamtgebnis" Text drin. Aber warum schreibt die folgende Code-Farbe auch die Zelle, die HAT "Gesamtergebnis" noch drei Zellen davon geschrieben hat, als ob der zweite Teil der "AND" -Klausel ignoriert wurde?Wenn und nicht funktioniert

For Each cell In Final.Worksheets("PIVOT").UsedRange.Cells.SpecialCells(xlFormulas) 
    If cell.Value = "Error 2023" And cell.Offset(0, -3).Value = "Gesamtergebnis" Then cell.Style = "Bad" 
Next cell 

Danke, Bartek

+1

Können Sie näher auf das Problem eingehen. Ich bin nicht ganz sicher, ob Ihr Problem verständlich ist – Tom

+1

Vielleicht könnte helfen, wenn Sie lesen> [Wie zu fragen] (https://stackoverflow.com/help/how-to-ask) –

+0

Danke, ich habe meine Frage bearbeitet zu sein verständlicher. – barciewicz

Antwort

1

Versuchen Sie, den folgenden Ansatz

Sub ErrTest() 
    Dim cell As Range 
    Dim errval As String 
    Set cell = Range("A1") 
    If IsError(cell) Then 
     errval = cell.Value 
     Select Case errval 
      Case CVErr(xlErrDiv0) 
       MsgBox "#DIV/0! error" 
      Case CVErr(xlErrNA) 
       MsgBox "#N/A error" 
      Case CVErr(xlErrName) 
       MsgBox "#NAME? error" 
      Case CVErr(xlErrNull) 
       MsgBox "#NULL! error" 
      Case CVErr(xlErrNum) 
       MsgBox "#NUM! error" 
      Case CVErr(xlErrRef) 
       MsgBox "#REF! error" 
      Case CVErr(xlErrValue) 
       MsgBox "#VALUE! error" 
      Case Else 
       MsgBox "This should never happen!!" 
     End Select 
    End If 
End Sub 

Hier ist die Doku https://msdn.microsoft.com/en-us/vba/excel-vba/articles/cell-error-values

Für Ihre Situation können Sie die folgende Funktion

Function refError(cell As Range) As Boolean 
    Dim errval As Variant 
    If IsError(cell) Then 
     errval = cell.Value 
     If errval = CVErr(xlErrRef) Then refError = True 
    End If 
End Function 
verwenden

Und würde Ihr Code sein dann wie

For Each cell In Final.Worksheets("PIVOT").UsedRange.Cells.SpecialCells(xlFormulas) 
    If refError(cell) And cell.Offset(0, -3).Value = "Gesamtergebnis" Then cell.Style = "Bad" 
Next cell 
+0

Dank Storax, was für mich funktionierte, änderte ich "If cell.Value =" Error 2023 "in meinem Code zu IfError (cell). Daher markierte Ihre Antwort als beste. – barciewicz

2

Der bessere Weg, um Ihren Fall zu behandeln ist SpecialCells mit dem Parameter 16 zu verwenden. SpecialCells Mit diesen Argumenten können Sie die Fehler in Formeln innerhalb eines Bereichs auswählen.

Ist das, was Sie versuchen?

Sub Sample() 
    Dim ErrRange As Range 
    Dim rng As Range 
    Dim aCell As Range 

    Set rng = Final.Worksheets("PIVOT").UsedRange.Cells 

    On Error Resume Next 
    Set ErrRange = rng.SpecialCells(xlCellTypeFormulas, 16) 
    On Error GoTo 0 

    If Not ErrRange Is Nothing Then 
     For Each aCell In ErrRange 
      If aCell.Offset(, -3).Value = "Gesamtergebnis" Then aCell.Style = "Bad" 
     Next aCell 
    End If 
End Sub 

Screenshot

ich unter aCell.Interior.ColorIndex = 3 statt aCell.Style = "Bad" zu Demonstrationszwecken verwenden. Es färbt die Zelle rot.

enter image description here

Verwandte Themen