VBA 宏颜色 怎样识别

来源:百度知道 编辑:UC知道 时间:2024/09/21 17:53:53
Range("H6:H20").Select ’宏差错,小于5的错误单元格涂色
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="5"
Selection.FormatConditions(1).Interior.ColorIndex = 8
... ...

Dim isAllOK As Boolean
isAllOK = True

For i = 6 To 20
If Range("H" & i).FormatConditions(1).Interior.ColorIndex =8 Then
isAllOK = False
Msgbox "H" & i & "错误"
End If
Next i

问题是:错误行能准确涂色,但是If Range("H" & i).FormatConditions(1).Interior.ColorIndex =8 ,这句判断的结果是,无论有没有错误,总是每行的isAllOK = False。手动涂色这个程序也没问题,对于宏涂的颜色怎样控制呢?似乎用过宏以后,每行都是错的,无法再通过颜色判断?

首先,你这是大于5的单元格涂色(底纹),因为代码是Operator:=xlGreater,Formula1:="5",就跟如下手动操作的效果是一样的:
菜单选择 格式 - 条件格式 ,然后设置底纹。

方法一:
判断填充的底纹颜色比较复杂,但找到一个现成的函数可以调用,参见:http://www.officefans.net/cdb/viewthread.php?tid=29249&fpage=1&highlight=%2BEmily

把上面链接里的那个ConditionalColor函数贴到你的VBA代码中,调用这个函数就可以获得单元格底纹颜色,使用方法如下:
Dim myColor As Long
For i = 6 To 20
myColor = ConditionalColor(Range("H" & i), "Interior")
If myColor = 8 Then
MsgBox "H" & i & "错误"
End If
Next i

方法二:
不用条件格式来判断,而是用循环来对每个单元格进行判断,就跟手动直接填色是一致的效果:
Dim i As Integer
For i = 6 To 20
If Range("H" & i) > 5 Then
Range("H" & i).Interior.ColorIndex = 8
End If