首页 > 解决方案 > VBA - 仅在使用自定义对象的属性时出现溢出错误

问题描述

我正在尝试创建一个Player包含Long属性 Wealth 的对象,该属性必须分配给 Excel 中的单元格,但只有在最后一行引用时才会出现溢出运行时错误,newPlayer.Wealth而不是在将值设置为大于的固定数字时最大整数。这是代码:

For i = 68 To (67 + numPlayers)
    Dim newPlayer As New Player
    newPlayer.Wealth = CLng(40000)
    newPlayer.Number = i - 67
    Range(Chr(i) & "2").Value = "Player " & CStr(newPlayer.Number)
    Range(Chr(i) & "3").Value = newPlayer.Wealth
Next

但是,这有效:

Range(Chr(i) & "3").Value = CLng(40000)

我试图从我指定的单元格中清除格式,但我仍然遇到问题。这是什么原因?这也是我的类属性:

Private pNumber As Integer
Private pProperties As New Collection
Private pWealth As Long

Property Get Number() As Integer
    Number = pNumber
End Property

Property Let Number(pNum As Integer)
    pNumber = pNum
End Property

Property Get Properties() As Collection
    Properties = pProperties
End Property

Property Get Wealth() As Long
    Number = pWealth
End Property

Property Let Wealth(w As Long)
    pWealth = w
End Property

Public Sub addProperty(property As PropertyUnit)
    pProperties.Add (property)
End Sub

标签: vbaexcel

解决方案


修改你的类定义。

这似乎是错误的。除了 Get Number() 错误的复制/粘贴之外,将 40K 长推入有符号整数会溢出。

Private pNumber As Integer
Private pWealth As Long
...

Property Get Wealth() As Long
    Number = pWealth
End Property

更改为类似,

...
Private pWealth As Long

Property Get Wealth() As Long
    Wealth= pWealth
End Property

Property Let Wealth(Value As Long)
    pWealth = Value 
End Property

推荐阅读