Vba 运行时错误6溢出

Vba 运行时错误6溢出,vba,Vba,尽管我所有的数据类型看起来都很好,但我还是遇到了这个错误 运行时错误6溢出 以下是函数: Function equation(x As Long) As Long Dim a As Long, b As Double a = Int(((x - 2) Mod 8) / 6) + 2 * Int((x - 2) / 8) b = (x + a - 1) / 2 equation = Abs(4 * b + 5 + 2 * Int(b)) End Functi

尽管我所有的数据类型看起来都很好,但我还是遇到了这个错误

运行时错误6溢出

以下是函数:

Function equation(x As Long) As Long

    Dim a As Long, b As Double

    a = Int(((x - 2) Mod 8) / 6) + 2 * Int((x - 2) / 8)
    b = (x + a - 1) / 2

    equation = Abs(4 * b + 5 + 2 * Int(b))

End Function

x=572662307
表示溢出时遇到错误。

x=572662307
。是32位有符号整数(约20亿)最大值的四分之一,因此您的算术运算可能会达到该值

在VBA中,Long是32位有符号整数,而不是C#中的64位有符号整数。我建议将
a
x
更改为
Double

您还可以展开函数,以便检查调试器中的所有中间步骤:

Function equation(x As Double) As Double

    Dim a As Double, b As Double, c As Double, d As Double, e As Double, f As Double, g As Double

    a = (x - 2) Mod 8
    b = a / 6
    b = Int( b )

    c = (x - 2) / 8
    d = 2 * Int( c )

    e = b + d
    f = (x + a - 1)
    f = f / 2

    g = 4 * b + 5 + 2 * Int( f )
    equation = Abs( g )

End Function

x=572662307
。是32位有符号整数(约20亿)最大值的四分之一,因此您的算术运算可能会达到该值

在VBA中,Long是32位有符号整数,而不是C#中的64位有符号整数。我建议将
a
x
更改为
Double

您还可以展开函数,以便检查调试器中的所有中间步骤:

Function equation(x As Double) As Double

    Dim a As Double, b As Double, c As Double, d As Double, e As Double, f As Double, g As Double

    a = (x - 2) Mod 8
    b = a / 6
    b = Int( b )

    c = (x - 2) / 8
    d = 2 * Int( c )

    e = b + d
    f = (x + a - 1)
    f = f / 2

    g = 4 * b + 5 + 2 * Int( f )
    equation = Abs( g )

End Function

是否确实要使用
Int
功能?它执行整数截断。
572662307
是32位有符号整数(20亿)最大值的四分之一。在VBA中,Long是32位整数,而不是C#中的64位整数。我建议将
x
更改为
Double
@Dai此int的替代品是什么?是的,这是必要的,因为我只需要modmaybe数据类型后面的整数部分do@DisplayName
LongLong
在32位Office中不可用。是否确实要使用
Int
功能?它执行整数截断。
572662307
是32位有符号整数(20亿)最大值的四分之一。在VBA中,Long是32位整数,而不是C#中的64位整数。我建议将
x
更改为
Double
@Dai此int的替代品是什么?是的,这是必要的,因为我只需要modmaybe数据类型后面的整数部分do@DisplayName
LongLong
在32位Office中不可用。但x也超过20亿也用于a,x也超过20亿也用于a