如果输入的值为零,我有一个弹出msg
框的vba代码。如果用户以后想要将零更改为其他某个数字,它仍然会弹出msg
框,然后才允许将零编辑为其他数字。
如果用户正在更改现有值,我不希望弹出msgbox
。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Intersect(Target, Range("b4:af18")) Is Nothing Then
If Target.Value = 0 Then
Application.EnableEvents = True
MsgBox "This is it", vbApplicationModal, "Scikess/Holiday"
End If
End If
Application.EnableEvents = True
End Sub
答案 0 :(得分:2)
我相信您正在描述用户在输入新答案之前点按删除键的情况。在这种情况下,空白单元格的数值为零,您在检查中得到误报,以查看用户是否输入了零。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("b4:af18")) Is Nothing Then
On Error GoTo bm_Safe_Exit
Dim trgt As Range
Application.EnableEvents = False
For Each trgt In Intersect(Target, Range("b4:af18"))
If trgt.Value = 0 And trgt.Text = "0" Then
MsgBox "This is it" & Chr(10) & trgt.Address(0, 0) & " cannot be zero.", _
vbApplicationModal, "Scikess/Holiday"
Application.Undo
trgt.Activate
Exit For
End If
Next trgt
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
我尝试在涉及多个Target时运行代码(例如粘贴或填充操作),但这会使Application.Undo
难以保留其他有效条目。如果不合适,请对此行为发表评论。
它还没有明确你想要对此作出反应的范围。您似乎错过了Intersect method中的Not
,使其对任何不在范围内的细胞做出反应。我已在上面调整以包括您指定的范围,而不是将其排除。