2017-05-16 4 views
0

을 정의 나는 다음과 같은 코드가 있습니다조건부 서식 범위

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 

배경 정보 : 그들은 시트의 셀 E4 "개요"보다 큰 경우이 공식 색깔 내 정의 된 범위 "AALB_Exposure"의 값을 수 있습니다. E4 셀의 값은 다른 두 셀의 결과입니다. 때때로 이러한 세포 중 하나가 다릅니다. "AALB_Exposure"와 같이 20 개 이상의 정의 된 범위가 있으므로 모듈을 사용하는 것을 선호합니다.

문제점 :이 모듈은 모든 값을 색상으로 만듭니다. 때로는 "AALB_Exposure"에 빈 셀이 있습니다. 나는 이것이 일어나지 않는 것을보고 싶다. 이것이 가능한가? 또한이 모듈은 정적이며 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 

최종 하위

은 문제가이 방법으로 해결하기 위해 어쩌면 더 나은, 항상 각 시트에 대해 동일합니다? 결과적으로, 개요 시트에있는 셀 E4가 각 시트의 동일한 위치에 항상있는 셀로 변경되었습니다. 그러나이 새 모듈이 맞습니까? 당신이 E4가 변경 될 때마다이 실행하려면

답변

0

, 당신은 워크 시트 변경 이벤트에 넣어해야합니다

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 

는 시트의 워크 시트 모듈에 당신이 실행하려는 넣어 . 또한 색상을 추가하기 전에 셀이 비 었는지 여부를 확인합니다.