替換所有代碼: -
private sub textbox1_change()
if textbox1.value = "" then exit sub
if textbox2.value = "" then exit sub
textbox3.value = cdbl(textbox1.value)/cdbl(textbox2.value)
end sub
private sub textbox2_change()
if textbox1.value = "" then exit sub
if textbox2.value = "" then exit sub
textbox3.value = cdbl(textbox1.value)/cdbl(textbox2.value)
end sub
有了這個代碼: -
Private Sub textbox1_change()
ShowResult
End Sub
Private Sub textbox2_change()
ShowResult
End Sub
Private Sub ShowResult()
Dim Str1 As String
Dim Str2 As String
Str1 = Trim(textbox1.Value)
Str2 = Trim(textbox2.Value)
If (Str1 = "") Or (Str2 = "") Then Exit Sub
If (IsDouble(Str1) = False) Or (IsDouble(Str2) = False) Then
textbox3.Value = "N\A"
Else
If (CDbl(Str2) = 0) Or ((CDbl(Str2) + CDbl(Str1)) = 0) Then
textbox3.Value = "N\A"
Else
textbox3.Value = CDbl(Str1)/CDbl(Str2)
End If
End If
End Sub
Private Function IsDouble(ByVal StrValue As String) As Boolean
Dim DblTest As Double
On Error GoTo ErrorHandle
DblTest = CDbl(StrValue)
IsDouble = True
Exit Function
ErrorHandle:
Err.Clear
End Function
這將檢查值不能爲Double
數據類型(如字符串)和壞司(即錯誤代碼6和11)。
編輯: - 下面是對上述代碼中發生的事件的演練。
程序textbox1_change
和textbox2_change
做同樣的事情,以避免重複的代碼;他們都會調用該代碼的一個實例。
Private Sub textbox1_change()
ShowResult
End Sub
Private Sub textbox2_change()
ShowResult
End Sub
之後,有新的程序ShowResult
保存代碼textbox1_change
和textbox2_change
籲請的單個實例。
Private Sub ShowResult()
Dim Str1 As String
Dim Str2 As String
Str1 = Trim(textbox1.Value)
Str2 = Trim(textbox2.Value)
If (Str1 = "") Or (Str2 = "") Then Exit Sub
If (IsDouble(Str1) = False) Or (IsDouble(Str2) = False) Then
textbox3.Value = "N\A"
Else
If (CDbl(Str2) = 0) Or ((CDbl(Str2) + CDbl(Str1)) = 0) Then
textbox3.Value = "N\A"
Else
textbox3.Value = CDbl(Str1)/CDbl(Str2)
End If
End If
End Sub
ShowResult
代碼進行多項檢查。
首先它把textbox1
到Str1
和textbox2
爲Str2
,並使用它們trim
。修剪意味着前後空格被刪除。例如,如果textbox1
的值爲「」(可能是通過用戶複製和粘貼完成的),那麼從技術上講,它不是空的,可能會導致錯誤。
Dim Str1 As String
Dim Str2 As String
Str1 = Trim(textbox1.Value)
Str2 = Trim(textbox2.Value)
下一個檢查是隻要有一個是空的,則退出程序,就像你在一行之前,但現在做到了。
If (Str1 = "") Or (Str2 = "") Then Exit Sub
下一個檢查會調用另一個執行檢查的過程以確保值可以轉換爲double。對於示例CDbl("Hello World!")
將會失敗,因爲它不是開頭的數字。所以這個檢查可以解決潛在的問題,如果它不是一個可以被分割的數字,那麼輸出'N \ A'。
If (IsDouble(Str1) = False) Or (IsDouble(Str2) = False) Then
textbox3.Value = "N\A"
的最終檢查的是,如果所述第二值是零或兩者均爲零,則「N \ A2是輸出,否則該除法完成和輸出。
If (CDbl(Str2) = 0) Or ((CDbl(Str2) + CDbl(Str1)) = 0) Then
textbox3.Value = "N\A"
Else
textbox3.Value = CDbl(Str1)/CDbl(Str2)
End If
這是最後的程序這被ShowResult
調用來檢查該值是否可以轉換爲Double
數據類型,它試圖進行轉換,如果發生錯誤,錯誤被清除並且false
(默認)將被返回給調用者,如果沒有輸出錯誤true
。
Private Function IsDouble(ByVal StrValue As String) As Boolean
Dim DblTest As Double
On Error GoTo ErrorHandle
DblTest = CDbl(StrValue)
IsDouble = True
Exit Function
ErrorHandle:
Err.Clear
End Function
希望這會有所幫助。
我得到編譯錯誤「阻止如果沒有結束if」如果我這樣做 –
然後你有你的代碼中的另一個問題。你有沒有下一個'For'循環?或者另一個'If'語句沒有相應的'End If'? – Kyle
@Vinaybilla凱爾說,這不是這個代碼的問題。你必須在其他地方遇到問題 – RGA