Was*_*des 5 excel vba listbox excel-vba userform
上下文:我正在编写一个用户表单,它将有一些过滤器来运行一个过程并用返回值填充一个工作表.
我的一个过滤器出了问题.我能够以简化版重现我的问题.此过滤器应根据所选的组合框选项将数据加载到列表框中:
我没有什么重命名,组分包括:UserForm1,ListBox1和ComboBox1.
我的破码(评论):
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某种程度上被设定.
以前有没有人经历过这种行为?如何解决它?提前致谢.
奇怪,因为它看起来,有一个名为两类ListBox不同库中,并且VBA混淆他们(同样适用于所有的控制实际上).这取决于您使用的是MSForms控件还是ActiveX控件.
在您的情况下,您应该消除MSForms.ListBox列表框的实际类型的歧义.
Sub loadList(list As MSForms.ListBox, id As Integer)
' ^^^^^^^
Run Code Online (Sandbox Code Playgroud)
为了避免这种疑虑,你也可以使用list As Object,(只要你只使用常用方法,就会使你的子句处理两种类型).