【问题标题】:VBA checkboxes to define autofilter criteria用于定义自动筛选条件的 VBA 复选框
【发布时间】:2014-07-23 16:29:48
【问题描述】:

我查看了许多帖子,但似乎无法找到答案。基本上,我在 excel 中有一个应用了自动过滤器的表格(我通过按 ctr+L 创建了表格),并且我希望用户表单中的复选框来定义自动过滤器中的哪些复选框被选中。记录代码时,我得到:

Sub Testing1()
    ActiveSheet.ListObjects("Table96").Range.AutoFilter Field:=1, Criteria1:= _
        Array("company1", "company2", "company3"), Operator:=xlFilterValues
'then selecting one additional company
    ActiveSheet.ListObjects("Table96").Range.AutoFilter Field:=1, Criteria1:= _
        Array("company1", "company2", "company3", "company 5"), Operator:=xlFilterValues
End Sub

我想要做的是能够使用复选框从该数组中添加/删除公司。如果 excel 有选项,我希望与每个公司关联的每个复选框都将该公司添加到条件数组中。如果做不到这一点,我希望能够捕获该列上的现有条件,并将其与新条件一起应用。

另一种可能的解决方案是在表单关闭时对所有复选框运行一个循环,并以某种方式使用选中复选框的结果来定义范围。

非常感谢任何帮助!

我正在使用 Excel 2010

【问题讨论】:

  • 我建议不要使用复选框,而是使用多选列表框(如果愿意,您也可以使其显示选项按钮)。那适合吗?
  • 这可行。我找不到使用列表框定义范围的代码。你能给我一些建议吗?

标签: excel vba checkbox userform autofilter


【解决方案1】:

多选列表框的示例代码:

Dim n                           As Long
Dim counter                     As Long
Dim asSelected()                As String
Dim lo                          As ListObject

Set lo = ActiveSheet.ListObjects("Table96")
With Me.ListBox1

    For n = 1 To .ListCount
        If .Selected(n - 1) Then
            ReDim Preserve asSelected(counter)
            asSelected(counter) = .List(n - 1)
            counter = counter + 1
        End If
    Next n
    If counter > 0 Then lo.Range.AutoFilter Field:=1, Criteria1:=asSelected, Operator:=xlFilterValues
End With

【讨论】:

  • 谢谢!非常感谢它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多