如果未定义变量,是否为其分配了默认值?

时间:2016-05-17 10:06:04

标签: excel vba

如果目标单元格的值大于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

谢谢你的时间!

4 个答案:

答案 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事件,而不是更适合此类要求。