2017-12-27 8 views
2

私は2つを組み合わせる必要がありますPrivate Sub Worksheet_Change(ByVal Target As Range) 私はExcelのVBAコードに慣れています、どうすればいいですか?以下のコード。2つのプライベートサブワークシートを結合する_Change(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

簡単な方法は、2番目のプライベートサブから変数の名前を変更することです。たとえば、rng - > rng2:r - > r2です。 – Maki

+0

範囲値にMsgboxペンダントを返す2つの異なるターゲット範囲がありますが、2つのプライベートサブを実行することはできません。私は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

あなたの絶対的な天才をシャイ、それは非常にうまく、あなたの助けを本当に感謝していただきありがとうございます。 –

関連する問題