我想要一个工作表更改宏,每当在范围(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
代码的第一部分可以正常工作。但是如上所述的第二部分没有。我还尝试将其拆分为两个单独的代码,但这显示了一个错误。在这方面的任何帮助将不胜感激!
答案 0 :(得分:2)
您有两个(也许更多)可能的选择:
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