Excel VBA:条件格式 - 内部颜色

时间:2017-01-30 16:29:13

标签: excel vba excel-vba

我正在尝试在VBA for Excel 2013中使用一些条件格式。如果列表验证是"完成"那么代码的执行应该使Col N中的单元格(内部颜色)变为绿色。任何其他时间和白色。如果Col N中的列表验证是" Held"则Col O中的单元格(内部颜色)应该变为红色。任何其他时间都是白色的。

目前,出现的结果是: 1.如果从列表验证中未选择任何内容,则Col N和Col O为白色。 2.当从列表验证中选择任何内容时,Col N变为绿色。 3.当" Held"如果选择了Col N中的任何其他内容,则在Col N中选择并再次变为白色 4.如果在Col O中选择了某些内容,则该单元格变为红色。

我目前的代码(以及我已经注释掉的部分):

'Add conditional format for column N.  If Status is "Complete", color Status cell (col N) green (43).

With Worksheets(SheetNum & " - Work").Range("N2:N2000").Select
    'Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=OR(($N2=""Not Started""),($N2=""In Queue""), ($N2=""In Work""), ($N2=""Held""), ($N2="" "")"
    'Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _
        Formula1:="=($N2=""Complete"")"
    'With Selection.FormatConditions(1)
        '.Interior.ColorIndex = 2
        '.StopIfTrue = True
    'End With
'End With

    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _
        Formula1:="=($N2=""Complete"")"
    With Selection.FormatConditions(1)
        .Interior.ColorIndex = 43
        '.StopIfTrue = True
    End With
End With

'Add conditional format for column O.  If Status is "Held", color Held For cell (col O)
'red (3).
'With Worksheets(SheetNum & " - Work").Range("O2:O2000").Select
    'Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _
        Formula1:="=OR(($N2=""Not Started""),($N2=""In Queue""), ($N2=""In Work""), ($N2=""Complete""))"
    'Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=($N2=""Held"")"
    'With Selection.FormatConditions(1)
        '.Interior.ColorIndex = 2
        '.StopIfTrue = True
    'End With

    With Worksheets(SheetNum & " - Work").Range("O2:O2000").Select
        Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _
            Formula1:="=($N2=""Held"")"
        With Selection.FormatConditions(1)
            .Interior.ColorIndex = 3
            '.StopIfTrue = True
        End With
    End With

另外,有人可以解释何时使用Operator:= xlNotEqual vs Operator:= xlEqual?这些似乎与我的预期相反。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

不幸的是,这些列需要动态着色,这就是我尝试使用条件格式的原因。我正在尝试将大约10种条件格式应用于这些表格,这些格式将在整个程序的生命周期中创建。

从好的方面来说,在整天尝试之后,我注意到我在(“”Held“”)之后错过了一个“)”。但它似乎没有使文件正常工作。

答案 1 :(得分:0)

单元格$ N2是否包含实际单词"完成"和#34;举行" ?

如果是这样,这可能会起作用

Sub tester()
    For I = 1 To 100 ' or lastused row
        If InStr(1, UCase(Sheet6.Range("N" & I).Value), "COMPLETE") > 0 Then
            Sheet6.Range("N" & I).Interior.ColorIndex = 43
        Else
            If InStr(1, UCase(Sheet6.Range("N" & I).Value), "HELD") > 0 Then
                Sheet6.Range("N" & I).Interior.ColorIndex = 3
            Else

                Sheet6.Range("N" & I).Interior.ColorIndex = 2
            End If
        End If

    Next I
End Sub

答案 2 :(得分:0)

我终于想出了正确的代码来获得我想要的东西。

    'Add conditional format for column N.  If Status is "Complete", color Status cell (col N) green (43).
With Worksheets(SheetNum & " - Work").Range("N2:N2000").Select
        Selection.FormatConditions.Add Type:=xlExpression, _
            Formula1:="=($N2=""Complete"")"
        With Selection.FormatConditions(1)
            .Interior.ColorIndex = 43
            .StopIfTrue = True
        End With
    End With