VBA - 条件格式的ActiveCell.Interior.ColorIndex -4142错误

时间:2017-07-07 13:32:54

标签: excel vba excel-vba

我有一个检查,确保在继续使用该函数之前,行中没有任何单元格用红色(colorindex 3)填充,但是ActiveCell.Offset(a,b).Interior.ColorIndex奇怪地返回'-4142' 。有没有人在我的代码中发现错误/注意到错误?

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

我最初添加突出显示的地方:

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

1 个答案:

答案 0 :(得分:1)

有很多原因导致代码不起作用。并且所有这些都隐藏在您未显示的代码部分中......

一般来说,只是猜测一下,您是否拥有ActiveCell对工作表的书写权限。因此,你必须解锁它。

另一个选择是,您选择了一个图表,而不是工作表。

第三种选择是你正在做其他一些技巧。通常,像这样的普通代码有效:

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

但我真的认为错误是我指出的第一个错误,当我使用ActiveCell锁定工作表时我得到了错误:

enter image description here

关于格式条件下的颜色索引,您应该使用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