gpt4 book ai didi

excel - 列表框在 excel-vba 用户表单中以某种方式设置为 Null

转载 作者:行者123 更新时间:2023-12-02 07:48:24 24 4
gpt4 key购买 nike

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

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

enter image description here

我没有重命名任何内容,组件是:UserForm1ListBox1ComboBox1

我的损坏代码(已注释):

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

当我设置断点时,我可以看到问题。 ListBox1 被设置为 Null,但我不知道如何解决它:

enter image description here

错误提示:

Run-time error '13': Type mismatch

但这很明显,因为 ListBox1 不知何故被设置为 Null

以前有人经历过这种行为吗?如何解决这个问题?提前致谢。

最佳答案

看起来很奇怪,有两个来自不同库的名为 ListBox 的类,VBA 混淆了它们(实际上这同样适用于所有控件)。这取决于您使用的是 MSForms 控件还是 ActiveX 控件。

在您的情况下,您应该使用 MSForms.ListBox 来消除歧义,这是列表框的实际类型。

Sub loadList(list As MSForms.ListBox, id As Integer)
' ^^^^^^^

为了避免这样的疑问,您还可以使用list As Object(只要您只使用常用方法,就可以让您的子程序处理这两种类型)。

enter image description here

关于excel - 列表框在 excel-vba 用户表单中以某种方式设置为 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082489/

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