访问运行时错误6溢出

时间:2018-08-16 15:45:24

标签: vba ms-access

我有一个可以进行简单计算的表格,但是数量很大。

示例: xml 96276480 图形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))

感谢您的帮助, 最高

1 个答案:

答案 0 :(得分:6)

VBA中的long是32位带符号整数(与VB.Net中的long是64位相反)。因此,它可以容纳的最大值是2147483647。

2931829760显然更大,因此会溢出。

使用DecimalCDec代替LongCLng将其转换为小数,或使用DoubleCDbl进行转换他们加倍。

CDbl可能更快,但可能会导致浮点误差问题。

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