VBA:用 ArrayList 填充列表框

VBA : Fill a Listbox with an ArrayList

提问人:Tounn 提问时间:10/18/2023 最后编辑:Tounn 更新时间:10/18/2023 访问量:71

问:

有人知道我怎样才能将一个添加到用户表单中。 我已经在模块中尝试了此代码,但是当窗口打开时,它不会显示任何内容。ArrayListListBoxUserForm1UserForm1

Public Sub here()
Dim MyList As Object
Set MyList = CreateObject("System.Collections.ArrayList")

MyList.Add "Item1"
MyList.Add "Item2"
MyList.Add "Item3"

UserForm1.ListBox1.List = MyList
End Sub

我读过一些文章,我知道我需要激活库,但不知道我还能做些什么来让它工作。mscordlib.dll

编辑

这是实际程序的用户表单:

Nothing happens

Excel VBA ArrayList 用户窗体

评论

1赞 VBasic2008 10/18/2023
只。您不需要创建对库的引用,因为您正在使用 和 aka 后期绑定。如果要使用早期绑定,请在创建引用后使用 .UserForm1.ListBox1.List = MyList.ToArrayAs ObjectCreateObject(..)Dim Mylist As ArrayList: Set MyList = New ArrayList
0赞 Tounn 10/18/2023
@VBasic2008我只是删除了我创建的引用并用您的解决方案替换了该行,它不会改变任何内容......在用户表单列表的初始化中是否有我无意中失败的参数,idkUserForm1.ListBox1.List = MyList
0赞 VBasic2008 10/18/2023
有关详细信息,请阅读 VBA ArrayList – Paul Kelly 的完整指南
0赞 FaneDuru 10/18/2023
恐怕你没有完全按照@VBasic2008的建议去做。你必须保持你的代码不变,只使用而不是 .现在,您显示的代码在哪里?如果在 UserForm1 的 cod 模块中,则应使用 .如果不是,讨论中的用户表单是否可见?然后,我在窗体上看不到任何按钮。如何运行显示的代码?如果希望它自动运行,则应将所有代码放在 Form 事件中。UserForm1.ListBox1.List = MyList.ToArrayUserForm1.ListBox1.List = MyListMe.ListBox1.ListInitialize
0赞 Tounn 10/18/2023
@FaneDuru代码在模块中,我替换了行:by,这不起作用。也不起作用。用户窗体是可见的,并且所有内容都已初始化。另外一点是,在另一个宏中,我有相同的结构,但不是,它工作正常。我想利用这些提供的“灵活性”。UserForm1UserForm1.ListBox1.List = MyListUserForm1.ListBox1.List = MyList.ToArrayMe.ListBox1.List = MyList.ToArrayarrayArrayList

答:

2赞 Notus_Panda 10/18/2023 #1

这适用于我调整后的 ..MyList.Array

enter image description here

就像 FaneDuru 说的,你需要以某种方式触发你的潜艇;在本例中,我使用了用户窗体的点击事件。显示 3 个项目唯一需要做的就是单击表格 et 瞧。 通常,您希望将其链接到窗体上或用户窗体初始化中的按钮(单击事件),如下所示:

Private Sub UserForm_Initialize()
    here2
End Sub

Private Sub here2()
    Dim MyList As Object
    Set MyList = CreateObject("System.Collections.ArrayList")
    
    MyList.Add "Item1"
    MyList.Add "Item2"
    MyList.Add "Item3"
    MyList.Add "Yes!"
    
    UserForm1.ListBox1.List = MyList.ToArray
End Sub

enter image description here

评论

0赞 Tounn 10/18/2023
Ty for your anwser 它很好地总结了评论:)
1赞 VBasic2008 10/18/2023 #2

使用数组列表填充列表框

用户窗体1模块

Private Sub UserForm_Initialize()
    Me.ListBox1.List = GetListboxData
End Sub

标准模块,例如 Module1

Function GetListboxData() As Variant
    
    Dim MyList As Object: Set MyList = CreateObject("System.Collections.ArrayList")

    MyList.Add "Item1"
    MyList.Add "Item2"
    MyList.Add "Item3"
    
    GetListboxData = MyList.ToArray

End Function
    
Sub ShowForm()
    With New UserForm1
        .Show
        ' Continue with your code...
    End With
End Sub

评论

0赞 Tounn 10/18/2023
完美的其他答案,感谢你们!