单元格公式结果更改时,如何解决msgbox出现两次的问题?

时间:2019-06-05 09:55:21

标签: excel vba excel-formula worksheet calculation

当公式结果在我的表范围("K2:K5")中更改时,我希望msgbox仅显示一次。现在它显示两次。

在这个范围内,我有excel公式。公式:H12*10

这些公式引用了一个下拉列表(我从excel菜单“数据”标签上的“数据验证”创建的列表)。

下拉列表位于cell H12中。 下拉列表中的值引用范围(D15:D17)

我注意到,当我删除H12中的下拉列表和手动键入值时,msgbox会显示一次。

谢谢您的帮助

Private Sub Worksheet_Calculate()
Dim Xrg As Range
Set Xrg = Range("K2:K5")
If Not Intersect(Xrg, Range("K2:K5")) Is Nothing Then
    MsgBox "Hi"
End If
End Sub

我还尝试将Application.enableEvents添加到代码中,但没有成功。

Private Sub Worksheet_Calculate()
Dim Xrg As Range
Set Xrg = Range("K2:K5")
Application.EnableEvents = False
If Not Intersect(Xrg, Range("K2:K5")) Is Nothing Then
    MsgBox "Hi"
End If
Application.EnableEvents = True
End Sub

1 个答案:

答案 0 :(得分:0)

由于比较两个完全相同的范围并查看它们是否相交,因此您的当前代码在Worksheet_Calculate事件上没有附加值。情况总是如此。您的代码将具有与以下相同的效果:

Private Sub Worksheet_Calculate()
    MsgBox "Hi"
End Sub

可能您的工作表中有更多功能可能会触发此事件,超出范围K2:K5,您应该查看Worksheet_Change事件,并在引用的单元格值更改后返回消息框。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$12" Then MsgBox "Hi"
End Sub

选择其中一个,但不要同时使用两者,因为您最终会得到两个msgbox。