我有运行时错误' 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
答案 0 :(得分:1)
听起来你正试图将零除零。检查Label9
和Label27
的值不为零。
通常,除以零将生成
运行时错误'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所说,这可能并不能解决你的问题。如果没有,请为您正在处理的每个值定义一个变量(如long
或double
),为其分配值f并在调试器中检查它们的值,如果运行时错误仍然存在发生的情况:
Dim val27 As doubble
Dim val19 As doubble
val27 = Val(Label27)
val9 = Val(Label9)
...
顺便说一句:您应该考虑用有意义的东西命名所有字段和变量。不要忘记添加Option explicit