【问题标题】:Autofilter does not filter anything when Criteria is not met不满足条件时,自动过滤器不会过滤任何内容
【发布时间】:2018-03-23 15:29:00
【问题描述】:

我有一段 VBA 可以自动过滤掉第 37 列为空白的所有行。它工作得很好,除非整个数据集的列中没有任何内容。然后,自动过滤器不会过滤掉除标题行之外的所有内容,而是不会过滤掉任何行。这导致在所有行中添加注释“预期浪费,而不仅仅是在第 37 列中具有值的行。代码如下。对于我做错的任何帮助将不胜感激。

'   Filter Data by ExpectedWaste
Sheets("Data").Columns("A:AQ").AutoFilter Field:=37, Criteria1:="<>"


'   Add expected Waste comment
Sheets("Data").Range("AQ2:AQ" & lastRow).FormulaR1C1 = "Expected waste"


'   Unfilter Data
If (Sheets("Data").AutoFilterMode And Sheets("Data").FilterMode) Or 
Sheets("Data").FilterMode Then
    Sheets("Data").ShowAllData
End If

【问题讨论】:

    标签: vba excel autofilter


    【解决方案1】:

    通常,我会在执行任何操作之前测试可见单元格。

    with Sheets("Data").Cells("A1:AQ" & lastRow)
        .AutoFilter Field:=37, Criteria1:="<>"
        with .resize(.rows.count-1, .columns.count).offset(1, 0)
            if cbool(application.subtotal(103, .cells)) then
                'perform actions on .Specialcells(xlcelltypevisible) here
                .columns("AQ").Specialcells(xlcelltypevisible).value = "Expected waste"
            end if
        end with
    end with
    

    【讨论】:

      【解决方案2】:

      我认为AutoFilter 不适用于空白列。首先检查是否有任何要过滤的内容,沿着Cells(Rows.Count, 37).End(xlUp).Row &gt; 1 行,否则您编写的代码Sheets("Data").Range("AQ2:AQ" &amp; lastRow).FormulaR1C1 = "Expected waste" 会填满整个列。

      【讨论】:

      • 谢谢。这是我最终使用 IF 语句检查 > 1 行然后执行操作的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2020-03-02
      相关资源
      最近更新 更多