在excel-vba用户表单中,Listbox被设置为Null

Was*_*des 5 excel vba listbox excel-vba userform

上下文:我正在编写一个用户表单,它将有一些过滤器来运行一个过程并用返回值填充一个工作表.

我的一个过滤器出了问题.我能够以简化版重现我的问题.此过滤器应根据所选的组合框选项将数据加载到列表框中:

在此输入图像描述

我没有什么重命名,组分包括:UserForm1,ListBox1ComboBox1.

我的码(评论):

Option Explicit

'sub that fill data in the list box columns
Sub loadList(list As ListBox, id As Integer)
    list.Clear
    If (id > 0) Then
        list.AddItem
        list.Column(0, 0) = "Item 1"
        list.AddItem
        list.Column(0, 1) = "Item 2"
    End If
End Sub

'event that will trigger the loadList sub
Private Sub ComboBox1_Change()
    Dim id As Integer
    id = ComboBox1.ListIndex

    loadList ListBox1, id
End Sub

'the combo options is auto initialized
Private Sub UserForm_Initialize()
    ComboBox1.AddItem
    ComboBox1.Column(0, 0) = "Option 1"
    ComboBox1.AddItem
    ComboBox1.Column(0, 1) = "Option 2"
End Sub
Run Code Online (Sandbox Code Playgroud)

当我设置一个brekpoint我可以看到问题.将ListBox1被设置为Null,但我不知道如何解决它:

在此输入图像描述

错误说:

运行时错误'13':类型不匹配

但很明显,因为ListBox1它正在Null某种程度上被设定.

以前有没有人经历过这种行为?如何解决它?提前致谢.

A.S*_*S.H 5

奇怪,因为它看起来,有一个名为两类ListBox不同库中,并且VBA混淆他们(同样适用于所有的控制实际上).这取决于您使用的是MSForms控件还是ActiveX控件.

在您的情况下,您应该消除MSForms.ListBox列表框的实际类型的歧义.

Sub loadList(list As MSForms.ListBox, id As Integer)
'                    ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

为了避免这种疑虑,你也可以使用list As Object,(只要你只使用常用方法,就会使你的子句处理两种类型).

在此输入图像描述