访问运行时错误6溢出

Max*_*ett 0 ms-access vba

我有一个表单进行简单的计算,但数字非常大.

示例:xml 96276480 graphics 2931829760

我已经将数据类型声明为Long,甚至还有一个CLng(Me.txtGraphics.value),但我仍然得到溢出错误这些数字来自文本框.这是我的代码:

Dim sgm As Long
Dim XML As Long
Dim prv As Long
Dim base As Long
Dim IETM As Long
Dim Graphics As Long
Dim total As Long
Dim pgCnt As Long
Const CXML = 2.5
Const CSGM = 6
Const CGraphic = 339
Dim pcSGM As Long
Dim pcXML As Long
Dim pcGraphic As Long

If Me.txtSGM.value = "" Then
  sgm = 0
Else
  sgm = Me.txtSGM.value
End If


If Me.txtXML.value = "" Then
  XML = 0
Else
  XML = Me.txtXML.value
End If

If Me.txtGraphics.value = "" Then
  Graphics = 0
Else
  Dim pics As Long
  pics = CLng(Me.txtGraphics.value)
  Graphics = CLng(pics)
End If

If Me.txtTotal.value = "" Then
  base = 0
Else
  base = Me.txtTotal.value
End If


prv = base


pcSGM = (CLng(sgm) / 1024) / CSGM
pcXML = (CLng(XML) / 1024) / CXML
pcGraphic = (CLng(Graphics) / 1024) / CGraphic


'total calculated newest SGM & XML values
total = (CLng(pcSGM)) + (CLng(pcXML)) + (CLng(pcGraphic))
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,马克斯

Eri*_*k A 6

VBA中的长整数是32位有符号整数(而不是VB.Net中的长整数,即64位).因此,它可以容纳的最大值是2147483647.

2931829760显然更大,因此你会溢出.

使用DecimalCDec代替LongCLng将它们转换为小数,或使用DoubleCDbl将它们转换为双精度.

CDbl 可能更快,但可能导致浮点不准确问题.

如果您确定您的代码只能在64位变量的Access中执行,您还可以使用CLngLng,将其转换为LongLong数据类型,64位有符号整数