【问题标题】:Excel-VBA: Check how many items have been selected in a column filter (or limit selections)Excel-VBA:检查在列过滤器中选择了多少项目(或限制选择)
【发布时间】:2017-07-17 13:58:07
【问题描述】:

我需要在 Excel 工作表上控制一个简单的列上的自动过滤器

经过研究,似乎在更改此类过滤器时不会触发特定事件。所以这里唯一想到的事件是.Calculate 事件,但我不确定这在这里是否可靠。

作为替代方案,有没有一种方法可以计算特定过滤器中有多少项目已被选中?
在我的情况下,我只需要在过滤器(但不是全部)中捕获 如果超过 1 个项目被选择
因为我似乎无法阻止或限制这一点,所以我会至少想显示一条警告消息

有人可以帮我吗?

我的过滤器数据:

Worksheets(1).Range("$C$1:$C$100").AutoFilter Field:=1

非常感谢,
迈克

【问题讨论】:

  • 使用=subtotal(103, $C$2:$C$100) 如果没有值显示计数将为零;否则为可见值的数字计数。
  • @Jeeped:谢谢,但这对我没有帮助,因为在我的情况下,相同的值可以在此列中出现多次。我需要知道过滤器下拉列表中是否选择了超过 1 个项目(如果我无法阻止)。
  • 然后使用聚合代替。

标签: vba excel filter autofilter


【解决方案1】:

使用如下数据:

您可以选择一些项目,例如:

Sub Macro1()
    ActiveSheet.Range("$A$1:$A$23").AutoFilter Field:=1, Criteria1:=Array( _
        "Belinda", "Cordelia", "Darth Vader"), Operator:=xlFilterValues
End Sub

通过宏或手动选择项目后,您可以显示所选数字的数量:

Sub HowMany()
    MsgBox UBound(ActiveSheet.AutoFilter.Filters.Item(1).Criteria1)
End Sub

当然,如果值在列中出现多次,可能会显示更多行。

【讨论】:

  • 非常感谢!这太棒了,效果很好——正是我想要的。 :)
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多