2017-07-07 8 views
2

Ich habe eine Überprüfung, die sicherstellt, dass keine Zellen in einer Reihe mit Rot (colorindex 3) gefüllt sind, bevor Sie mit der Funktion aber ActiveCell.Offset (a, b) .Interior.ColorIndex gibt seltsamerweise '-4142' zurück. Wer hat das schon einmal erlebt/einen Fehler in meinem Code bemerkt?VBA - ActiveCell.Interior.ColorIndex -4142 Fehler durch bedingte Formatierung

If UCase(ActiveCell.Offset(0, -1).Value) = "X" Then 

    For i = 0 To 7 
    If ActiveCell.Offset(0, i).Interior.ColorIndex = 3 Then 
     MsgBox "Correct fields highlighted in red." 
     Exit Sub 

    End If 
    Next 
    ident = ActiveCell.Value 
    verNo = ActiveCell.Offset(0, 1).Value 
    title = ActiveCell.Offset(0, 2).Value 
    status = ActiveCell.Offset(0, 3).Value 
    location = ActiveCell.Offset(0, 4).Value 
    appDate = ActiveCell.Offset(0, 6).Value 
    ccRef = ActiveCell.Offset(0, 7).Value 

Wo ich die Markierung zunächst hinzufügen:

With ThisWorkbook.Worksheets("Document Index").Range("B5:B500") 
    .FormatConditions.Delete 
    .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(($B5=""""), 
$A5=""X"")" 
    .FormatConditions(1).Interior.ColorIndex = 3 
    .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(($B5<>""""), 
$A5=""X"")" 
    .FormatConditions(2).Interior.ColorIndex = 37 
End With 

Antwort

2

Es gibt viele Gründe, warum der Code funktioniert nicht. Und alle von ihnen sind in dem Teil des Codes versteckt, die Sie nicht zeigen ...

In der Regel, nur raten, ist, dass Sie keinen Schreibzugriff auf das Blatt mit der ActiveCell haben. Sie müssen es also entsperren.

Eine andere Option kann sein, dass Sie ein Diagramm und kein Arbeitsblatt ausgewählt haben.

Eine dritte Option ist, dass Sie einige andere Tricks machen. Im Allgemeinen arbeitet ein einfacher Code wie folgt:

Sub Test 
    ActiveCell.Offset(0,0).interior.ColorIndex =3 
End Sub 

Aber ich denke wirklich, dass der Fehler die erste ist Ich habe darauf hingewiesen, ich es, wenn ich das Blatt mit dem ActiveCell sperren:

enter image description here

in Bezug auf Farbindex im Format Zustand, sollten Sie die netten Funktionen verwenden, zur Verfügung gestellt von Mr. Pearson:

Function ColorIndexOfCF(Rng As Range, _ 
    Optional OfText As Boolean = False) As Integer 

Dim AC As Integer 
AC = ActiveCondition(Rng) 
If AC = 0 Then 
    If OfText = True Then 
     ColorIndexOfCF = Rng.Font.ColorIndex 
    Else 
     ColorIndexOfCF = Rng.Interior.ColorIndex 
    End If 
Else 
    If OfText = True Then 
     ColorIndexOfCF = Rng.FormatConditions(AC).Font.ColorIndex 
    Else 
     ColorIndexOfCF = Rng.FormatConditions(AC).Interior.ColorIndex 
    End If 
End If 

End Function 

http://www.cpearson.com/Excel/CFColors.htm

+0

Ja, guter Punkt, aber das Blatt ist nicht gesperrt. Es muss einen anderen Grund geben, warum er nicht auf die Zelle zugreifen kann, die ich nicht wahrnehme. Ich verstehe auch nicht, warum es die Zelleneigenschaften immer noch nicht lesen kann, wenn die Blätter gesperrt sind. –

+0

@KieranHughes mehr Code anzeigen ... – Vityata

+0

nicht sicher, was ich sonst noch zeigen kann, was relevant ist, habe ich den Hauptbeitrag mit etwas mehr Code aktualisiert. Ich habe definitiv keine Schutzanrufe für dieses bestimmte Blatt. –

Verwandte Themen