gpt4 book ai didi

excel - 可变长度循环中的 VBA "subscript out of range"。找不到问题

转载 作者:行者123 更新时间:2023-12-04 22:15:41 25 4
gpt4 key购买 nike

我目前正在尝试创建一个程序,该程序需要可变数量的玩家(由 (NumPlayerText.Value - 1) 表示)并让他们掷骰子 (NumThrowText.Value - 1) 次。每个玩家掷骰的值将被求和并比较,最高获胜者。
在该功能期间,设计用于模拟 (NumThrowText-1) 骰子滚动并添加值的循环仅在玩家数量高于掷骰数时才会发生故障。
这是两个交互功能。

Function rollsumvalue(playernum)

Dim rolls()
ReDim rolls(NumThrowText.Value - 1)
ReDim rollsum(NumPlayerText.Value - 1)

For playernum = 0 To (NumThrowText.Value - 1)
rolls(playernum) = rolls(playernum) + random_generator(1, 6)
Next
rollsum(playernum) = (WorksheetFunction.Sum(rolls(playernum)))

End Function

Private Function callrollsumvalue()

For player = 0 To (NumPlayerText.Value - 1)
rollsumvalue (player)
MsgBox ("Rolled a total " & rollsum(player) & " points")
Next

End Function
rollsum 是一个不同于 rolls 的全局变量,仅供引用。
调试显示 下标超出范围 rolls(playernum) = rolls(playernum) + random_generator(1, 6)但是我不明白为什么只有当玩家数 > 掷骰数时才会发生这种情况
对不起,很长的问题。任何帮助表示赞赏!

最佳答案

请注意,我做了一些更改:
我为 NumThrows 和 NumPlayers 使用了两个常量,因为我没有您的输入框。
我切换了例程的顺序 - 通常将调用子放在被调用函数之上。rollSumValue现在返回玩家的值,然后可以将其添加到 PlayersRollsum。
rollSumValue 内我正在使用一个长变量来存储结果 - 无需将该值存储在数组中。
如果你想重复使用PlayersRollsum那么您可以更改playAllPlayers到返回 PlayersRollsum 的函数结果-但是您应该考虑一个新名称,例如getAllPlayerResults .这样你就可以避免全局变量。

Option Explicit


Private Const NumThrows As Long = 5
Private Const NumPlayers As Long = 10

Public Sub playAllPlayers()

Dim PlayersRollsum(NumPlayers - 1) As Long

Dim playerNum As Long
For playerNum = 0 To NumPlayers - 1
PlayersRollsum(playerNum) = rollSumValue(playerNum)
MsgBox "Player " & playerNum & " rolled a total of " & PlayersRollsum(playerNum) & " points"
Next

End Sub

Private Function rollSumValue(playerNum As Long) As Long

Dim rolls As Long
Dim j As Long
For j = 1 To NumThrows
rolls = rolls + random_generator(1, 6)
Next

rollSumValue = rolls

End Function

关于excel - 可变长度循环中的 VBA "subscript out of range"。找不到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69844774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com