gpt4 book ai didi

vba - 用户表单初始化后更新用户表单列表框

转载 作者:行者123 更新时间:2023-12-02 10:10:11 26 4
gpt4 key购买 nike

有什么方法可以更新 Userform_Initialize 子之外的 UserForm 上的 ListBox 吗?

为什么?我正在构建一个二十一点游戏,并使用列表框告诉用户他们/庄家拥有哪些牌。我希望使用一个简单的子(ShowCards)将项目添加到列表框中,但我遇到了问题:

enter image description here

Play 按钮调用位于普通模块中的 PlayBlackjack 子组件

Option Explicit

Dim cards As New Collection

Sub ShowGame()
UFDisplay.Show
End Sub

Sub PlayBlackjack()
'fill the cards collection with 5 shuffled decks
PrepareCards

Dim i As Integer
Dim userHand As New Collection
Dim dealerHand As New Collection

'deal cards (removing the dealt cards from the cards collection)
For i = 1 To 2
DealCard cards, userHand
DealCard cards, dealerHand
Next i

ShowCards userHand, UFDisplay.UserHandList <-- ERROR HERE (Type mismatch)

'more code to follow
End Sub

Private Sub ShowCards(hand As Collection, list As ListBox)
Dim i As Integer

For i = 1 To hand.Count
list.AddItem hand(i).CardName
Next i
End Sub

如果您认为需要更多代码,请告诉我。 hand 是卡片类的集合,其中 .CardName 返回类似于 3 of Hearts

的内容

我读到的所有内容似乎都告诉我,用户表单在初始化后是静态的,因此在添加新项目后我需要以某种方式刷新它。我尝试了 Userform.Repaint 但没有成功。

所以如果确实没有其他办法,我是否应该将 userHanddealerHand 声明为全局变量,更新它们并调用 Useform_Initialize 来获取更新后的值并将其显示给用户?考虑到游戏的性质是可以为两个玩家发多张牌,因此每次游戏多次重新初始化用户表单似乎并不明智。

欢迎所有建议。如果您认为我应该完全不同地完成它,我仍然很乐意听到(但对工作表解决方案不太感兴趣)

更新#1为了清楚起见,ShowGame 通过工作表上的按钮调用,然后从用户窗体上的 Play 按钮调用 PlayBlackjack(用户窗体代码中没有其他内容)

最佳答案

啊,我明白了。您不能将 listBox 参数声明为 ListBox。后者是为 Activex 控件保留的,而不是为 VBA 控件保留的。将 ShowCardssub 的签名更改为:

Private Sub ShowCards(hand As Collection, list As Control) '<~~ or MSForms.ListBox, or simply as Object...

关于vba - 用户表单初始化后更新用户表单列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41105795/

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