单元格更改时,vba会显示消息框吗?

时间:2017-01-05 08:46:28

标签: excel vba

我希望每次更改列中的单元格值时都显示一个消息框。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Cells.Count < 3 And Target.Column = 13 Then
    If Not Intersect(Target, Target.Worksheet.Range("M:M")) Is Nothing Then

    MsgBox "hEY"
End If
    End If
End Sub

理想情况下,我想尝试避免工作表更改事件,因为这似乎会减慢我的传播速度,包括当用户键入其他单元格时。光标显示加载光标,就像vba尝试在后台工作一样。

有解决方法吗?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您无法在事件中放置代码而无法显示MessageBox。您可以做的最好的事情是测试可能首先失败的条件,因此代码测试de事件中的条件次数会更少,并且运行得更快。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("M:M")) Is Nothing Then GoTo Quit
    If Target.Cells.Count < 3 Then GoTo Quit

    MsgBox "Hey!"
Quit:
End Sub

根据我的经验,你应该避免使用这种代码,因为你说的原因。我总是免费设置我的工作表并创建一个“验证”工具。按钮,指出用户发现错误的地方(很难,我不知道你想用你的代码完成什么)。

答案 1 :(得分:0)

您可以简化代码,只需检查要更改的单元格是否在M列中,然后检查单元格数是否小于3.

如果不符合这两个If,则代码不执行任何操作,直接转到End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("M:M")) Is Nothing Then
    If Target.Cells.Count < 3 Then MsgBox "Hey"
End If

End Sub