Excel 条件格式定义范围

Excel 条件格式定义范围,excel,vba,Excel,Vba,我有以下代码: Sub ConditionalFormattingNamedRange() Dim x As Range, Cell As Range Set x = Range("AALB_Exposure") For Each Cell In x If Cell.Value > Sheets("Overview").Range("E4").Value Then Cell.Interio

我有以下代码:

Sub ConditionalFormattingNamedRange()                                     
Dim x As Range, Cell As Range

Set x = Range("AALB_Exposure")

For Each Cell In x
    If Cell.Value > Sheets("Overview").Range("E4").Value Then
        Cell.Interior.Color = RGB(0, 255, 0)
    End If
Next 
End Sub
背景信息:如果我定义的范围“AALB_曝光”中的值大于工作表“概述”中的单元格E4,则此公式会将其着色。单元格E4的值是其他两个单元格的结果。有时这些细胞中的一个会发生变化。我有20多个定义范围,如“AALB_曝光”,因此我更喜欢使用模块

问题:此模块使所有值都着色。有时“AALB_曝光”中有一些空白单元格。我希望这种情况不会发生。这可能吗? 此外,此模块是静态的,在我调整E4时不会修改定义范围内单元格的颜色。这只有在我运行模块之后才会发生。是否可以确保根据E4值的变化立即调整单元格的颜色

谢谢大家!

-----编辑------

在布鲁斯·韦恩的建议下,我稍微修改了一下代码

Private Sub Workbook_SheetCalculate(ByVal Target As Range, ByVal Sh As Worksheet) 
If Target.Address = "$A$9" Then                    
Application.ScreenUpdating = False    
Dim x As Range, Cell As Range  
Set x = Sh.Range("P1:P150,AD1:AD150,AR1:AR150,BF1:BF150,BT1:BT150,CH1:CH150,CV1:CV150,DJ1:DJ150,DX1:DX150,EL1:EL150")                                                 
For Each Cell In x
If Cell.Value > Sh.Range("A9").Value And Cell.Value <> "" Then
    Cell.Interior.Color = RGB(0, 255, 0)
End If
Next
End If  
Application.ScreenUpdating = True 
Private子工作簿\u SheetCalculate(ByVal目标作为范围,ByVal Sh作为工作表)
如果Target.Address=“$A$9”,则
Application.ScreenUpdating=False
尺寸x作为范围,单元格作为范围
设置x=Sh.Range(“P1:P150,AD1:AD150,AR1:AR150,BF1:BF150,BT1:BT150,CH1:CH150,CV1:CV150,DJ1:DJ150,DX1:DX150,EL1:EL150”)
对于x中的每个单元格
如果Cell.Value>Sh.Range(“A9”)值和Cell.Value“”,则
Cell.Interior.Color=RGB(0,255,0)
如果结束
下一个
如果结束
Application.ScreenUpdating=True
端接头

由于每个工作表的命名范围始终相同,因此用这种方式解决问题可能更好?因此,我更改了位于概览表上的单元格E4,该单元格始终位于每张表的相同位置。
但是,此新模块是否正确?

如果希望在
E4
发生更改时运行此模块,则需要将其放入工作表更改事件中:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$4" Then
Application.ScreenUpdating = False
Dim x As Range, Cell As Range

Set x = Range("AALB_Exposure")

For Each Cell In x
    If Cell.Value > Sheets("Overview").Range("E4").Value And Cell.Value <> "" Then ' added `AND` part to check if cell is not blank
        Cell.Interior.Color = RGB(0, 255, 0)
    End If
Next

End If
Application.ScreenUpdating = True
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Address=“$E$4”,则
Application.ScreenUpdating=False
尺寸x作为范围,单元格作为范围
设置x=范围(“AALB_曝光”)
对于x中的每个单元格
如果Cell.Value>Sheets(“Overview”).Range(“E4”).Value和Cell.Value”,则“添加”和“检查单元格是否为空的部分”
Cell.Interior.Color=RGB(0,255,0)
如果结束
下一个
如果结束
Application.ScreenUpdating=True
端接头
将其放入要在其上运行的工作表的工作表模块中。在添加颜色之前,它还会检查单元格是否为空