运行时错误' 6'溢出VBA

时间:2017-08-16 08:22:39

标签: vba excel-vba excel

我有运行时错误' 6'当我执行以下代码时溢出。

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

2 个答案:

答案 0 :(得分:1)

听起来你正试图将零除零。检查Label9Label27的值不为零。

通常,除以零将生成

  

运行时错误'11':除以零

错误,但如果Label9为零(或空白) (val(Label13) - val(Label14) + 1) * val(Label27)评估为零(可能是因为Label27为零),您将计算{ {1}}导致VBA生成

  

运行时错误'6':溢出

错误。

答案 1 :(得分:0)

如果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