我正在尝试创建一个Player
对象,该对象包含一个Long
属性Wealth,必须将其分配给Excel中的单元格,但是仅当最后一行引用{ {1}},而不是将值设置为大于最大整数的固定数字时。这是代码:
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)
答案 0 :(得分:2)
修改您的类定义。
这似乎是错误的。除了由于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
答案 1 :(得分:0)
正如吉普(Jeeped)指出的那样,Property Get Wealth()
需要这样修改:
Property Get Wealth() As Long
Wealth = pWealth
End Property
其他几点。
没有理由将数字转换为字符串以用于地址串联。 VBA将自动执行此操作。 Range(Chr(i) & "2").Value
和Range(Chr(i) & 2).Value
实际上是相同的。
没有理由将数字强制转换为长整数。 CLng(40000)或40000都可以。
循环内的 Dim newPlayer As New Player
将仅创建Player
类的单个实例。在循环外部声明newPlayer
,并在循环内部使用Set newPlayer = New Player
创建更多newPlayer
的实例。
Range(Chr(i) & "2")
就可以使用。我更喜欢Cells(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