VBA函数用于测试单元格是否在Excel中有条件地格式化

Chr*_*ris 10 excel vba function conditional-formatting

我编写了下面的函数来测试单元格是否根据单元格填充激活了条件格式.

Function cfTest(inputCell)

    If inputCell.DisplayFormat.Interior.Color <> 16777215 Then
        cfTest = True
    Else
       cfTest = False
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

但它不起作用.说,这个方法确实如此.

Sub myCFtest()
Dim R As Integer
R = 2
Do
    If Range("I" & R).DisplayFormat.Interior.Color <> 16777215 Then
        Range("K" & R).Value = True
    Else
        Range("K" & R).Value = False
    End If

    R = R + 1

Loop Until R = 20
End Sub
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么功能不起作用?

干杯.

编辑:更新的功能,但不适用于条件格式

Function cfTest(inputCell)
    If inputCell.Interior.ColorIndex <> -4142 Then
        cfTest = True
    Else
       cfTest = False
    End If
End Function
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 5

如果需要结果,这里是一个工作演示。E 列查看 D 列,如果它按单元格填充颜色有条件地格式化,则显示值 TRUE。即单击名称“鲍勃”,并通过下面的代码有条件地格式化突出显示单元格

=IF(AND(CELL("row")=ROW(D1),CELL("col")=COLUMN(D1)),TRUE)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

单击另一个名称,会出现相同的结果。

在此处输入图片说明

但是,当我在另一个单元格上单击名称时,我选择的姓氏仍然突出显示,给人的印象是按钮仍然按下。

在此处输入图片说明

后面的VBA代码如下。

这位于 Sheet1 代码中:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column = 4 And Target.Row <= Application.WorksheetFunction.CountA(Range("D:D")) Then
    Range("D:D").Calculate
    Call cfTest

End If

End Sub
Run Code Online (Sandbox Code Playgroud)

这是方法本身:

Sub cfTest()

Range("E:E").ClearContents

If ActiveCell.DisplayFormat.Interior.color <> 16777215 Then
    ActiveCell.Offset(0, 1) = True
End If

End Sub
Run Code Online (Sandbox Code Playgroud)

我最终基于此示例构建的应用程序也有更多内容,但回到发布的问题,cfTest() 方法允许我测试单元格是否基于单元格填充有条件地格式化。


小智 0

我会事先检查您的条件使用此的颜色索引:

Function cfTest_color_chk(inputCell As Range)
  cfTest_color_chk = inputCell.Interior.ColorIndex
End Function
Run Code Online (Sandbox Code Playgroud)

然后你的函数

Function cfTest(inputCell As Range)
  If inputCell.Interior.ColorIndex <> -4142 Then
      cfTest = True
  Else
     cfTest = False
  End If
End Function
Run Code Online (Sandbox Code Playgroud)

另一个让事情坚如磐石的解决方案是结合这两个函数,以便 cfTest 将 cfTest_color_chk 作为参数,并且 cfTest_color_chk 将返回要匹配的颜色值...

希望这可以帮助

帕斯卡