如果目标单元格的值大于80,我正在创建一个代码来弹出消息“目标已完成”。
但是如果我在单元格中输入变量,则会弹出消息。为什么?以及如何解决它?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$2" Then
If Target.Value > 80 Then MsgBox "Goal Completed"
End If
End Sub
谢谢你的时间!
答案 0 :(得分:1)
我会使用If Val(Target.Value) > 80 Then MsgBox "Goal Completed"
答案 1 :(得分:1)
最好转动工具,选项。需要变量声明 ON。如果没有,VBA将在首次使用时声明该变量,如果您在名称中输入了一个拼写错误,则会创建一个新变量,并且您可以很快找到错误,例如alSets
和{{1} }。
至于你的问题:字符串初始化为空,整数为0等。对于特定于巡视的行为,请使用调试器检查变量中的内容并检查发生的情况。
答案 2 :(得分:1)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$B$2" Then _
Exit Sub
If IsError(Target.Value) Then _
Exit Sub
If Target.Value = "" Then _
Exit Sub
If Not IsNumeric(Target.Value) Then _
Exit Sub
If Target.Value > 80 Then
MsgBox "Goal Completed"
End If
End Sub
答案 3 :(得分:1)
检查该值是否实际上是一个数字,您可以使用类似IsNumeric()
的内容,但是您可能会出现误报,所以我会使用模式匹配来处理这类事情:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
If Target.Value Like Application.Rept("[0-9]", Len(Target.Value)) Then
If Target.Value > 80 Then MsgBox "Goal Completed"
End If
End If
End Sub
注意我还使用了Worksheet_Change
事件,而不是更适合此类要求。