工作表更改:如果单元格的值在一定范围内> c8-> MsgBox,并且其他单元格(具有功能)中的值> 300-> MsgBox

时间:2019-02-11 08:21:37

标签: excel vba

我想要一个工作表更改宏,每当在范围(F14:J26)中的一个单元格中输入大于8的值,并在单元格C37中输入大于300的值时,它就会弹出一个消息框。

我的问题是,单元格C37不是手动填写的,而是具有公式的,因此它是对另外两个单元格的计算。而且我认为excel无法将其识别为值,因此只要该单元格中的结果大于300,它就不会执行任何操作。

Option Explicit

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("F14:J26")) Is Nothing Then
            If Target.Value > 8 Then
                MsgBox "Was that accepted?"

          End If
    End If

   If Not Application.Intersect(Target, Range("C37")) Is Nothing Then
            If Target.Value > 300 Then
                 MsgBox "Was that accepted?"

          End If
    End If

End Sub

代码的第一部分可以正常工作。但是如上所述的第二部分没有。我还尝试将其拆分为两个单独的代码,但这显示了一个错误。在这方面的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您有两个(也许更多)可能的选择:

  1. 使用“ Worksheet_Calculate”事件,而不是“ Worksheet_Change”事件。
  2. 如果C37中的公式是固定的,则不要监视C37,而是监视源单元。
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("F14:J26")) Is Nothing Then
          If Target.Value > 8 OR Range("C37").Value > 300 Then
                MsgBox "Was that accepted?"

          End If
    End If
End Sub

答案 1 :(得分:2)

除了Gerrit's anwser外,我还建议按以下方式扩展它,因此如果有人将数据范围粘贴到F14:J26中,它也不会失败。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRng As Range
    Set AffectedRng = Application.Intersect(Target, Range("F14:J26"))

    Dim FoundInvalidData As Boolean

    If Target.Parent.Range("C37").Value > 300 Then 
        FoundInvalidData = True
    ElseIf Not AffectedRng Is Nothing Then
        Dim Cel As Range
        For Each Cel In AffectedRng.Cells
            If Cel.Value > 8 Then
                FoundInvalidData = True
                Exit For
            End If
        Next Cel
    End If

    If FoundInvalidData Then
        MsgBox "Was that accepted?"
    End If
End Sub