【问题标题】:How to detect if filter(s) changed on a worksheet?如何检测工作表上的过滤器是否已更改?
【发布时间】:2010-11-24 15:25:52
【问题描述】:

在excel工作簿项目中,我们如何检测某些工作表上的过滤器是否更新?

【问题讨论】:

    标签: excel filter vsto


    【解决方案1】:

    确保您有一个包含整列数据的公式(例如 COUNT)。对于表格,打开Total行。

    当过滤器更改时,Excel 计算事件将因为公式而触发,您可以通过将以下代码插入工作表中来选择它。

    Private Sub Worksheet_Calculate()
    
     MsgBox "Calculation"
    
    End Sub
    

    您的工作表需要设计为仅包含数据,否则需要代码来确定工作表上的计算事件是否不是由于过滤器的更改而产生的。

    您需要添加代码来获取过滤器值。关注 Filter 类成员,如 Citeria1、Criteria2、Operator、On 等。

    【讨论】:

    • 如果您的工作表超过此表,请使用=SUBTOTAL(3,... 计算过滤器的结果。在 Worksheet_Calculate 例程中,将该值存储在模块范围的变量中,并将其与上一个状态进行比较 - 每次更改时,您就知道过滤器已更改。当然,当过滤器更改但结果计数相同时,这仍然存在。那么罗伯特的最后一句话会对你有所帮助......
    【解决方案2】:

    我的案例是一个 Excel 数据库。我创建了一个标签,指示“过滤项目数”或“会议实例数”,因此当您使用下拉过滤器进行过滤时,此标签将更新。我没有找到任何“过滤器更改”事件。我尝试了上述方法,如下所示:

    • 在工作表中选择一个您不愿意使用的单元格
    • 将单元格的公式设置为“=count(B:B)”或“=counta(C:C)”或任何取决于整个列的公式。确保单元格不在同一列中
    • 将此辅助单元格的格式类型设置为“自定义”,并将格式设置为“;;;”所以单元格内容将不可见
    • 在 VBA 中,使用“工作表计算”事件来执行您的代码

    Private Sub Worksheet_Calculate()

    ' 过滤器更改时要执行的命令和操作

    结束子

    • 现在,你完成了

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多