【发布时间】: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