繁体   English   中英

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

[英]VBA applying conditional formatting to cell

我正在尝试向检查单元格 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

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

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

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

Range.Address 属性默认为绝对行和列引用。 您正在寻找类似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左上角单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM