Vba 返回在Excel表格中自动更新数据时所更新内容的确切信息
我希望在单元格D7中的值大于0时显示一个消息框。消息框应询问支票是否为低风险项目。如果Vba 返回在Excel表格中自动更新数据时所更新内容的确切信息,vba,excel,Vba,Excel,我希望在单元格D7中的值大于0时显示一个消息框。消息框应询问支票是否为低风险项目。如果No,则在单元格D9中输入0,然后转到D11。如果是,则应显示一个文本框以在中输入数字。此号码将复制到单元格D9 听起来很简单,我想不出来 Private Sub Worksheet_Change(ByVal Target As Range) ' Code goes in the Worksheet specific module Dim rng As Range Dim Response As Long
No
,则在单元格D9中输入0
,然后转到D11。如果是
,则应显示一个文本框以在中输入数字。此号码将复制到单元格D9
听起来很简单,我想不出来
Private Sub Worksheet_Change(ByVal Target As Range)
' Code goes in the Worksheet specific module
Dim rng As Range
Dim Response As Long
Dim Risk As Long
' Set Target Range, i.e. Range("A1, B2, C3"), or Range("A1:B3")
Set rng = Target.Parent.Range("D7")
' Only look at single cell changes
If Target.Count > 1 Then Exit Sub
' Only look at that range
If Intersect(Target, rng) Is Nothing Then Exit Sub
' Action if Condition(s) are met (do your thing here...)
If Target.Value > 0 Then
Response = MsgBox("Is the check a low risk item?", vbQuestion + vbYesNo, "Item Risk Assessment")
Select Case Response
Case 6 ' Yes
Risk = Application.InputBox("Enter a new value", "Value required", Type:=1)
Range("D9").Value = Risk
Case 7 ' No
Range("D9").Value = 0
Range("D11").Select
End Select
End If
End Sub
这仅在手动修改单元格时有效,但我正在尝试进行设置,以便在单元格没有手动更新而是自动更新时发出消息,因为它具有计算数据的公式。如果您知道D7的所有直接和间接先例,则可以在这些单元格上使用更改事件。因此,如果D7包含
=SUM(D5:D6)
并且D5和D6是输入单元,那么您可以
If Not Intersect(Target, Me.Range("D5:D6")) Is Nothing Then
If Me.Range("D7").Value = 0 Then
如果有很多先例,这会变得有点笨拙
或者您可以使用工作表\u Calculate事件并持续检查D7的值。这通常是个坏主意。首先,它将一直运行,可能会降低工作表的性能。其次,如果每次计算工作表时都弹出一个消息框,我可能会辞职。如果执行计算事件路径,则该过程可能如下所示
Private Sub Worksheet_Calculate()
' Code goes in the Worksheet specific module
Dim lResponse As Long
Application.EnableEvents = False
If Me.Range("D7").Value > 0 Then
lResponse = MsgBox("Is the check a low risk item?", vbQuestion + vbYesNo, "Item Risk Assessment")
If lResponse = vbYes Then
Me.Range("D9").Value = Application.InputBox("Enter a new value", "Value required", Type:=1)
Else
Me.Range("D9").Value = 0
Me.Range("D11").Select
End If
End If
Application.EnableEvents = True
End Sub
最后,你可以考虑把提示直接放在电子表格上。将此文本放在C9中:
Enter a new value for low risk, enter 0 for high risk:
并使文本颜色和内部颜色相同,以便隐藏。然后添加条件格式,使其在D7=0时可见。您需要进行最后一次检查,就像保存之前一样,以确保用户输入了一个数字。或者,当D7=0且D9为空时,可以将D9条件格式设置为亮红色
如果看不到实际的工作表,很难得到比这更具体的结果。驱动同一工作表中单元格的公式是什么?如果是这样,您可以重新配置代码,在每次输入后检查D7的值,并可能进行检查,以确保它只检查特定的单元格条目,这样,如果有人在单元格旁边随机输入数据,并且D7=0,它不会无意中触发它?嘿,斯科特,是的,公式在同一张表中。也许我没有完全理解你,你能再重复一遍吗?山姆-我指的是迪克在下面答案的第一部分所说的话。如果您知道公式的先例,您可以将
工作表\u Change
事件限制为仅对这些单元格执行检查。啊,请复制,抱歉误解。迪克提供了方便的信息,非常感谢你的回复斯科特。嘿,迪克,非常感谢,我想我确实需要进行计算,但我不知道我当前脚本的语法是什么。是的,每次更新时弹出一条消息听起来可能很烦人,但更新不是每周发生一次。有关计算事件示例,请参阅编辑。注意,在计算整个表时,没有“目标”。是的,迪克!就是这样,非常感谢!谢谢大家。知道了。