2016-05-17 82 views
0

如果目標單元格的值大於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 

謝謝你的時間!

回答

1

我會用If Val(Target.Value) > 80 Then MsgBox "Goal Completed"

1

它始終是最好把工具,選項。需要變量聲明 ON。如果不是,VBA將在第一次使用時聲明該變量,如果您在名稱中輸入了錯字,則會創建一個新變量,並且您可能發現錯誤的時間很短,例如alSetsa1Sets

至於你的問題:字符串初始化爲空,整數爲0等。對於巡視特定的行爲,使用您的調試器來檢查變量中的內容並檢查發生了什麼。

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 
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事件,它更適合這種需求。

相關問題