【问题标题】:Error in data filtration using listbox selection in excel在 Excel 中使用列表框选择进行数据过滤时出错
【发布时间】:2020-01-27 01:52:28
【问题描述】:

我有一个组合列表框,我想通过它过滤从 I6 到 L21 的表。这是列表框和表格的快照。 但是,当我选择一个或多个选项并尝试从表中过滤数据时,它会给我“需要对象”错误。 这是我的代码

Sub cmd1_Click()
    Dim x As Variant
    ReDim x(0)
    Application.ScreenUpdating = False
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            x(UBound(x)) = ListBox1.List(i)
            ReDim Preserve x(UBound(x) + 1)
        End If
    Next i
    Sheet2.Range("I6:L35").AutoFilter Field:=3, Criteria1:=x, Operator:=xlFilterValues
    Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 哪里出错了?
  • For i = 0 To ListBox1.ListCount - 1
  • Option Explicit 丢失,ListBox1 未定义。
  • 还可以考虑使用 ReDim x(0 To {ListBox1}.ListCount - 1) 来调整数组的大小,而不是每次迭代时都复制它,只是为了再添加一个项目(在弄清楚 ListBox1 的实际名称之后 - 请注意这里没有人可以知道这一点。如果列表框没有项目,您将要立即退出(Exit Sub)。
  • @MathieuGuindon 列表框就在您眼前。

标签: excel vba combobox listbox


【解决方案1】:

ListBox1 在该范围内不存在。要么不叫它,要么不在范围内。验证名称,并进行相应修复。

但是一开始就不允许代码编译带有未定义的标识符。始终将Option Explicit 放在每个模块的顶部。

您可以勾选 VBE 选项对话框中的“需要变量声明”复选框,以将 Option Explicit 自动添加到每个模块。

【讨论】:

  • 名字是Listbox1,我已经添加了属性快照。
  • @UmarFarooq 它是一个 ActiveX 控件吗?它必须是一个 ActiveX 控件。您无法使用这样的标识符访问表单控件。
  • 无。问题是列表框。如果您双击列表框,它是否会在您的过程所在的同一模块中创建Private Sub ListBox1_SomethingListBox1 标识符仅在它所在的工作表模块的范围内。
  • 我在设计模式下选择了列表框并按下查看代码一个新模块 Sub ListBox15_Change() 出现
  • @UmarFarooq 看起来名字是ListBox15,而不是Listbox1 然后......如果实际控制打开,新程序不可能在新的(标准?)模块中工作表,没有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多