VBA将条件格式应用于单元格

时间:2016-05-09 02:52:49

标签: excel vba excel-vba

我试图将条件格式添加到检查单元格X1的范围内,如果它不匹配则应用条件。

如果我将它应用于一个单元格,那么效果很好。但是我需要它应用于范围内的每个单元格。

代码:

    Function FindComment(rng As Range, strSearch As String) As Boolean

On Error GoTo err_h:

strSearch = LCase(strSearch)

If Len(strSearch) = 0 Then
    FindComment = False
    Exit Function
End If

If InStr(1, rng.Comment.Text, strSearch, vbTextCompare) > 0 Or InStr(1, rng.Text, strSearch, vbTextCompare) > 0 Then
    FindComment = False
    Exit Function
End If

FindComment = True
Exit Function

err_h:
    FindComment = True
End Function

并应用条件格式:

Public Sub AddConditionalFormat(rng As Range)

   rng.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=FINDCOMMENT(" & rng.Address(, , xlA1) & ",$X$1)"
    rng.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

    With Selection.FormatConditions(1).Font
        .ColorIndex = 2
    End With

    With rng.FormatConditions(1).Interior
        .Pattern = xlGray75
        .PatternThemeColor = xlThemeColorDark2
        .PatternTintAndShade = 0
        .ColorIndex = 2
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

    rng.FormatConditions(1).StopIfTrue = False

End Sub

范围范围(" B6:GD9")被确定为rng。

目前如果结果匹配,它只会删除包括匹配在内的所有单元格。

任何人都知道如何轻松修复?我喜欢通过应用于每个单元格而不会使代码滞后的东西。

1 个答案:

答案 0 :(得分:1)

Range.Address property默认为绝对行和列引用。您正在寻找类似A1的内容,但您正在获得$A$1

rng.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=FINDCOMMENT(" & rng.Cells(1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False, ReferenceStyle:=xlA1) & ", $X$1)"
'alternate in shorthand
rng.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=FINDCOMMENT(" & rng.Cells(1, 1).Address(0, 0, xlA1) & ", $X$1)"

使用.Cells(1, 1)会使该公式引用rng中的左上角单元格。