【问题标题】:How to fix msgbox showing up twice When Cell Formula Result Changes?当单元格公式结果更改时,如何修复 msgbox 显示两次?
【发布时间】:2019-06-05 09:55:21
【问题描述】:

当公式结果在我的表格范围("K2:K5") 中发生变化时,我希望 msgbox 只显示一次。现在它显示了两次。

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

这些公式是指下拉列表(我从 Excel 菜单数据选项卡上的“数据验证”创建的列表)。

下拉列表位于cell H12。 下拉列表中的值是指 range(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

【问题讨论】:

  • If Not Intersect(... 将始终为真,因为您正在比较两个相同的范围......它没有真正的价值
  • 根据@TimStack 他的评论,您的代码没有附加价值。 Worksheet_Calculate 事件上的一个简单的Msgbox "Hi" 就可以了。此外,如果您有更多可以触发事件的公式,您可能需要查看Worksheet_Change 事件,查看Target 是否等于H12 单元格,如果为真,则返回消息框。
  • Worksheet_Calculate 不会为您提供更新值的确切范围,因此在您的情况下它是无用的。 Worksheet_Change 为您提供更改的确切位置,但如果使用公式更改值,即使这样也不会给您任何结果。
  • 您“可以”在 K2:K5 中的公式中添加 UDF,请参见此处:stackoverflow.com/questions/51495354/…

标签: excel vba excel-formula worksheet calculation


【解决方案1】:

由于比较两个完全相同的范围并查看它们是否相交,您当前的代码对 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

【讨论】:

  • 非常感谢您的解决方案和解释如何以适当的方式组合在一起。它现在按预期工作。非常感谢!
猜你喜欢
  • 2013-10-05
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
相关资源
最近更新 更多