2017-08-16 231 views
0

我運行時錯誤'6'溢出當我執行下面的代碼。運行時錯誤'6'溢出-VBA

Private Sub ComboBox1_CLICK() 

If val(Label27) >= 0 And val(Label27) <= val(Label9) Then  
    Label35 = (val(Label13) - val(Label14) + 1) * val(Label27)/val(Label9)  
ElseIf val(Label27) >= val(Label9) And val(Label27) <= val(Label6) Then  
    Label35 = val(Label13) + 1  
Else  
    Label35 = (val(Label13) + 1) * val(Label6)/val(Label27)    
End If 

end sub 
+1

聽起來就像你試圖除以零。檢查Label9和Label27的值不爲零。 – Olly

+0

否,零除會引起運行時錯誤11 – FunThomas

+0

哪條線會出錯?變量崩潰時,你的'Label27'等等什麼值? – YowE3K

回答

1

如果VBA使用int爲數據類型和中間結果可能發生溢出超過了int的大小 - 即使最終的結果是小到足以放入一個int

Dim i As Integer 
i = 1000 * 1000/2000 ' Will raise overflow 

你應強制VBA使用數據類型long。 因此,而不是使用功能val,使用功能CLng

Dim i As Integer 
i = CLng(1000) * 1000/2000 ' Okay 
i = CLng("1000") * CLng("1000")/cLng("2000") ' Okay 

由於YowEwK態度,這可能無法解決您的問題。如果沒有,定義你正在處理(如longdouble)的每一個值的變量,分配值f標籤,它並檢查調試他們的價值觀,如果運行時錯誤仍然發生:

Dim val27 As doubble 
Dim val19 As doubble 
val27 = Val(Label27) 
val9 = Val(Label9) 
... 

順便說一句:你應該考慮用有意義的東西來命名你所有的字段和變量。並且不要忘記添加Option explicit

+0

聽起來不錯,但是OP的代碼使用'Val',這意味着所有的計算都應該以'Double'完成。 (至少一個'TypeName(Val(「1」))',甚至TypeName(Val(CInt(1)))'返回'Double',所以我看不到任何會將它放回一個Integer。) – YowE3K

+0

@YowEwK:你說得對,只是檢查。 – FunThomas

1

聽起來就像你試圖將零除零。檢查Label9Label27的值不爲零。

通常被零除將產生

運行時錯誤 '11':被零除

錯誤,但如果Label9爲零(或空白)(val(Label13) - val(Label14) + 1) * val(Label27)評估爲零(可能是因爲Label27爲零),您將計算0/0,這將導致VBA生成一個

運行時錯誤'6':溢出

錯誤。