VBA-仅当使用自定义对象的属性时发生溢出错误
我试图创建一个VBA-仅当使用自定义对象的属性时发生溢出错误,vba,excel,Vba,Excel,我试图创建一个Player对象,该对象包含必须分配给Excel中某个单元格的Long属性Wealth,但只有当最后一行引用newPlayer.Wealth时,才会出现溢出运行时错误,而当该值设置为大于最大整数的固定数字时,则不会出现溢出运行时错误。代码如下: For i = 68 To (67 + numPlayers) Dim newPlayer As New Player newPlayer.Wealth = CLng(40000) newPlayer.Number
Player
对象,该对象包含必须分配给Excel中某个单元格的Long
属性Wealth,但只有当最后一行引用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
修改类定义 这似乎是错误的。除了copy/paste from 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
修改类定义 这似乎是错误的。除了copy/paste from 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
正如Jeeped指出的,
Property Get Wealth()
需要这样修改:
Property Get Wealth() As Long
Wealth = pWealth
End Property
还有几点
没有理由为地址串联将数字强制转换为字符串。VBA将自动执行此操作<代码>范围(Chr(i)和“2”)。值和范围(Chr(i)和2)。值
实际上是相同的
没有理由把一个数字放在长句中。CLng(40000)或40000将起作用
Dim newPlayer As New Player
在循环中只会创建Player
类的一个实例。在循环外部声明newPlayer
,并在循环内部使用Set newPlayer=newPlayer
创建更多newPlayer
实例
Range(Chr(i)和“2”)
只要玩家数量不超过22人就可以使用。我更喜欢单元格(2,I+4).Value
Dim newPlayer As New Player
numPlayers = 10
For i = 1 To numPlayers
Set newPlayer = New Player
newPlayer.Wealth = CLng(40000)
newPlayer.Number = i
Cells(2, i + 4).Value = "Player " & CStr(newPlayer.Number)
Cells(2, i + 5).Value = newPlayer.Wealth
Next
正如Jeeped指出的,
Property Get Wealth()
需要这样修改:
Property Get Wealth() As Long
Wealth = pWealth
End Property
还有几点
没有理由为地址串联将数字强制转换为字符串。VBA将自动执行此操作<代码>范围(Chr(i)和“2”)。值和范围(Chr(i)和2)。值
实际上是相同的
没有理由把一个数字放在长句中。CLng(40000)或40000将起作用
Dim newPlayer As New Player
在循环中只会创建Player
类的一个实例。在循环外部声明newPlayer
,并在循环内部使用Set newPlayer=newPlayer
创建更多newPlayer
实例
Range(Chr(i)和“2”)
只要玩家数量不超过22人就可以使用。我更喜欢单元格(2,I+4).Value
Dim newPlayer As New Player
numPlayers = 10
For i = 1 To numPlayers
Set newPlayer = New Player
newPlayer.Wealth = CLng(40000)
newPlayer.Number = i
Cells(2, i + 4).Value = "Player " & CStr(newPlayer.Number)
Cells(2, i + 5).Value = newPlayer.Wealth
Next
查看类定义和Let/Get非常重要。查看类定义和Let/Get非常重要。