2

VBA を使用してセルの値をチェックし、セルの値が値を超えている場合は電子メール モジュールを呼び出して電子メールを送信しています。

複数のセルをチェックしたいのですが、VBA で 2 つの Private Sub Worksheet_Change を持つことはできないことを理解しています。複数のセルをチェックする最良の方法は何ですか?

これが私が使用しているコードです。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("A1"), Target) Is Nothing Then
        If IsNumeric(Target.Value) And Target.Value > 10 Then
        Call Mail_small_Text_Outlook
        End If
    End If
End Sub

可能であれば、1つのサブに結合したい別のものがあります

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range("B1"), Target) Is Nothing Then
        If IsNumeric(Target.Value) And Target.Value > 20 Then
        Call Mail_small_Text_Outlook
        End If
    End If
End Sub
4

2 に答える 2

0
Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Taget.Address

  Case "$A$1" 'This will make sure its just one cell and its A1          
      If IsNumeric(Target.Value) And Target.Value > 10 Then         
        Call Mail_small_Text_Outlook         
      End If     

  Case "$B$1" 'This will make sure its just one cell and its B1
      If IsNumeric(Target.Value) And Target.Value > 20 Then         
        Call Mail_small_Text_Outlook         
      End If 

  'Case ... whatever else you want.

End Select
End Sub

より効率的な方法があるかもしれませんが、これが最初に頭に浮かんだことです。これがあなたの質問に答えることを願っています。

于 2012-06-28T02:51:47.787 に答える
0

これを行うのはどうですか?

Private Sub Worksheet_Change(ByVal Target As Range)
    Call MailAlert(Target, "A1", 10)
    Call MailAlert(Target, "B1", 20)
End Sub

Private Sub MailAlert(ByVal Target As Range, ByVal Address As String, ByVal Value As Integer)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Application.Intersect(Range(Address), Target) Is Nothing Then
        If IsNumeric(Target.Value) And Target.Value > Value Then
        Call Mail_small_Text_Outlook
        End If
    End If
End Sub
于 2012-06-28T03:35:09.643 に答える