2017-12-27 23 views
2

2 개를 결합해야합니다 Private Sub Worksheet_Change(ByVal Target As Range) 저는 Excel VBA 코드가 처음입니다, 어떻게해야합니까? 아래 코드.2 개 개인 서브 워크 시트 합치기 (범위로 ByVal 목표)

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, r As Range, rv As Long 
    Set rng = Intersect(Target, Range("C77:AD81")) 
    If rng Is Nothing Then Exit Sub 
    For Each r In rng 
     rv = r.Value 
     'Peak Flow Doctor Warning and Weight Gain Warning 
     If rv = 180 Then 
      MsgBox "''PEAK FLOW CRITICAL AT 180L/MIN''" & vbCrLf & "''PREDNISONE PROBABLY REQUIRED''" & vbCrLf & "''MAKE DOCTOR'S APPOINTMENTS ASAP''", vbInformation, "WARNING" 
     End If 
     If rv = 120 Then 
      MsgBox "''PEAK FLOW CRITICAL AT 120L/MIN''" & vbCrLf & "''MAKE URGENT DOCTOR'S APPOINTMENTS''" & vbCrLf & "''OR GO TO A&E IMMEDIATELY''", vbInformation, "CRITICAL WARNING" 
     End If 
     If rv >= 450 Then 
      MsgBox "''CHECK OR TEST PEAK FLOW METER''" & vbCrLf & "''IT MAY BE FAULTY AND GIVING FALSE HIGH's''", vbInformation, "WARNING" 
     End If 


Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, r As Range, rv As Long 
    Set rng = Intersect(Target, Range("C93:AD93")) 
    If rng Is Nothing Then Exit Sub 
    For Each r In rng 
     'Weight Gain Warning 
     rv = r.Value 
     If rv = 90 Then 
      MsgBox "''LIKELY TO EXACERBATE COPD SYMPTOMS''" & vbCrLf & "''CHRONIC ASTHMA OR EMPHYSEMA PROBABLE''", vbCritical, "WARNING" 
     End If 
     If rv = 95 Then 
      MsgBox "''IF SWELLING IN ANKLES PROBABLE FLUID RETENTION''" & vbCrLf & "''POSSIBILITY OF HEART FAILURE IF UNATTENDED''", vbCritical, "CRITICAL WARNING" 
     End If 
     Next r 
End Sub 
+1

당신이 결합하는 방법을 의미합니까? 단일 변경 이벤트에서 두 절차를 모두 수행 하시겠습니까? 특정 순서대로 완료해야합니까? 당신의 정확한 문제와 당신이 시도한 것을 설명하려고 노력하면 해결책을 제시 할 수 있습니다. – Sercho

+0

쉬운 방법은 두 번째 개인 하위 변수의 이름을 다시 지정하는 것입니다. 예를 들어, rng -> rng2 : r -> r2. – Maki

+0

범위 값에 Msgbox 펜던트를 반환하는 두 가지 다른 대상 범위가 있지만 두 개의 Private Sub를 실행할 수 없습니다. 저는 Maki example, rng -> rng2 : r -> r2를 시도했지만 다음 r에서 컴파일 오류가 발생합니다. VBA를 처음 접했을 때 나는 약간 혼란 스럽습니다. –

답변

1

아래 코드는 현재 2 Worksheet_Change 이벤트의 병합입니다.

Select Case을 사용하여 코드를 조금 정리할 수도 있습니다.

코드

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim rng As Range, r As Range, rv As Long 

    If Not Intersect(Target, Range("C77:AD81")) Is Nothing Then 
     Set rng = Intersect(Target, Range("C77:AD81")) 
     For Each r In rng 
      'Peak Flow Doctor Warning and Weight Gain Warning 
      Select Case r.Value 
       Case 180 
        MsgBox "''PEAK FLOW CRITICAL AT 180L/MIN''" & vbCrLf & "''PREDNISONE PROBABLY REQUIRED''" & vbCrLf & "''MAKE DOCTOR'S APPOINTMENTS ASAP''", vbInformation, "WARNING"  
       Case 120 
        MsgBox "''PEAK FLOW CRITICAL AT 120L/MIN''" & vbCrLf & "''MAKE URGENT DOCTOR'S APPOINTMENTS''" & vbCrLf & "''OR GO TO A&E IMMEDIATELY''", vbInformation, "CRITICAL WARNING" 
       Case Is >= 450 
        MsgBox "''CHECK OR TEST PEAK FLOW METER''" & vbCrLf & "''IT MAY BE FAULTY AND GIVING FALSE HIGH's''", vbInformation, "WARNING" 
      End Select 
     Next r 
    End If 

    If Not Intersect(Target, Range("C93:AD93")) Is Nothing Then 
     Set rng = Intersect(Target, Range("C93:AD93")) 
     For Each r In rng 
      'Weight Gain Warning 
      Select Case r.Value 
       Case 90 
        MsgBox "''LIKELY TO EXACERBATE COPD SYMPTOMS''" & vbCrLf & "''CHRONIC ASTHMA OR EMPHYSEMA PROBABLE''", vbCritical, "WARNING" 
       Case 95 
        MsgBox "''IF SWELLING IN ANKLES PROBABLE FLUID RETENTION''" & vbCrLf & "''POSSIBILITY OF HEART FAILURE IF UNATTENDED''", vbCritical, "CRITICAL WARNING" 
      End Select 
     Next r 
    End If 

End Sub 
+0

샤이 절대 천재, 아주 잘 작동, 정말 고마워요 정말 고마워. –