2017-02-20 6 views
0

3 개의 버튼과 작은 스프레드 시트가있는 양식을 만들고 있습니다. 각 버튼은 다른 범위의 수용 가능한 결과와 일치하게됩니다. 첫 번째 버튼을 누르면 38에서 44.4 사이의 시트에 녹색 결과가 강조 표시되고 해당 범위 밖의 결과는 빨간색으로 강조 표시됩니다. 두 번째 버튼의 경우 양호한 범위가 33 ~ 39.4, 세 번째 버튼이 33 ~ 39.4 (동일한 허용 결과 범위, 다른 유형의 테스트)로하고 싶습니다. 기본적으로 각 버튼마다 다른 조건부 서식을 적용해야합니다. 현재 사용하고 있습니다 :값을 기준으로 색상 변경

Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Target.Range("C16") > 44.4 Then Target.Interior.Color = vbRed 
If Target.Range("C16") < 38 Then Target.Interior.Color = vbRed 
If Target.Range("C16") >= 38 And Target <= 44.4 Then Target.Interior.Color = vbGreen 


End Sub 

저는 선택 변경 속성에 익숙하지 않아 어쨌든 작동하지 않습니다. 여기에서 어디로 가야할지 모르겠다. 어떤 도움을 주시면 감사하겠습니다. 감사! 버튼에서

+0

*를 SelectionChange *, 그것은 * 속성 *의되지 않은'Worksheet' **행사**. 'Worksheet_SelectionChange' *는 발생/해고 될 때 해당 이벤트를 처리합니다. * 이벤트 핸들러 * 프로 시저입니다. 사이드 노트, 이벤트 처리기는 '비공개'여야하며, 내 용은 '공개'입니다. –

+0

@ Mat'sMug - Worksheet_SelectionChange가 개인 워크 시트 코드 시트 (그리고 그것이 트리거 할 유일한 장소)에 있고 공개 모듈 코드 시트가 아닌 경우에는 암시 적으로 전용입니다. – Jeeped

+0

@ 지프레드 [음, 음, 객체 브라우저가 보는 것과 다르다] (https://i.stack.imgur.com/CrlPy.png). –

답변

-1

입력 :

Sub Button1() 

    Dim myRange, cell As Range 
    Set myRange = Range("C16:G16") 

    For Each cell In myRange 
     If cell.Value > 44.4 Then 
      cell.Interior.Color = vbRed 
     ElseIf cell.Value < 38 Then 
      cell.Interior.Color = vbRed 
     ElseIf cell.Value >= 38 And cell.Value <= 44.4 Then 
      cell.Interior.Color = vbGreen 
     End If 
    Next 
End Sub 
+0

잘 작동하지만 범위를 ("C16 : G16")으로 변경하면 런타임 오류가 발생합니다. 셀 범위에 대해 다른 구문이 있습니까? 또는 범위가 작동하지 않는 이유가 무엇인지 생각해보십시오. 최악의 경우 최악의 경우 각 셀에 대해이 코드를 다섯 번 복사/붙여 넣을 수 있습니다 ... – ladymrt

+0

"Set myRange = Range ("YourRange ")에서 범위를 지정해야합니다. 업데이트 된 게시물을 참조하십시오. –

+1

'Select Case'또는 'ElseIf'를 사용하면 이미 하나의 기준을 충족시킨 값을 비교하지 않습니다. – Jeeped

4

44.4 38보다 크거나 동일하고, 그에 대한 확인이 38 인 행의 값보다 크거나 같은 의미없이 다른 조건의 결과의 실행 녹색이 될거야.

조건을 더 구체적으로 지정해야합니다. 구체적으로 "X와 Y 사이"부분을 지정해야합니다.

Select Case ActiveSheet.Cells("C16").Value 
    Case 38 To 44.4 
     Target.Interior.Color = vbGreen 
    Case Else 
     Target.Interior.Color = vbRed 
End Select 

코드은 "33와 39.4 사이 녹색"과 같을 것이다 :

Select Case ActiveSheet.Cells("C16").Value 
    Case 33 To 39.4 
     Target.Interior.Color = vbGreen 
    Case Else 
     Target.Interior.Color = vbRed 
End Select 
이 코드 "38와 44.4 사이 녹색"것 - 예를 들어, 이것은 Select Case 블록의 작업처럼 보인다

패턴에 주목 하시겠습니까? 그것을 매개 변수화 자체 절차에 넣어 :

Public Sub ConditionalHighlight(ByVal checkCell As Range, ByVal target As Range, ByVal lowerLimit As Double, ByVal upperLimit As Double) 
    'ensure the value is a Double (and not an error or a string): 
    If VarType(checkCell.Value) <> vbDouble Then Exit Sub 

    'work with an actual Double instead of the Variant we get off the cell: 
    Dim checkValue As Double 
    checkValue = CDbl(checkCell.Value) 

    Select Case checkValue 
     Case lowerLimit To upperLimit 
      target.Interior.Color = vbGreen 
     Case Else 
      target.Interior.Color = vbRed 
    End Select 

End Sub 

이제 당신의 버튼 'Click 핸들러에서 해당 전화 :

Private Sub Button1_Click() 
    ConditionalHighlight Range("C16"), Range("whatever"), 38, 44.4 
End Sub 

Private Sub Button2_Click() 
    ConditionalHighlight Range("C16"), Range("whatever"), 33, 39.4 
End Sub 

Private Sub Button3_Click() 
    ConditionalHighlight Range("C16"), Range("whatever"), 42, 74.4 
End Sub 
+0

@Jeeped 감사합니다. 나는 그 혼란스러운'Case Is' 문법을 어쨌든 싫어한다. :) –