【问题标题】:Why is AutoFilter being applied three rows before the specified range为什么在指定范围之前应用自动筛选三行
【发布时间】:2013-03-16 19:06:07
【问题描述】:

以下代码根据工作表“'Grand Totals'!B1”中设置的日期条件将自动过滤器应用于多个工作表,应用于工作表范围 A6,其格式为日期。第 1-5 行包含标题和公式。但是,第 3-5 行与从 A6 开始的过滤行一起消失。谁能明白为什么?据我所知,A6 行上方的所有内容都应该保持可见。再次感谢您的帮助。

子 ApplyFilterDate()

    Dim Ws As Worksheet
    Application.ScreenUpdating = False 'Turn off ScreenUpdating to speed filtering
        For Each Ws In ActiveWorkbook.Worksheets
            If Ws.Name <> "Grand Totals" Then
                Ws.Activate
                Ws.AutoFilterMode = False 'Remove any existing filters
                Ws.Range("A6").AutoFilter Field:=1, Criteria1:=Range("'Grand Totals'!B1").Text
                Range("G2").Activate
                Center_it 'Puts next data entry cell in approximate center of screen
            End If
        Next
    Sheet1.Activate
    Range("B2").ClearContents
    Range("B1").Interior.ColorIndex = 3 'Set color of cell showing filter date
    Range("B1").Activate
    Application.ScreenUpdating = True 'Turn on ScreenUpdating

结束子

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您要求自动过滤器仅对单元格 A6 进行操作。这没有意义,因此 Excel 会扩展选择范围以包括周围的单元格。您需要指定应用自动过滤器的范围。

    【讨论】:

    • 谢谢,成功了。我查看了几个示例,许多示例只引用了列中的第一个单元格,所以我认为这可能就足够了。男孩,我有很多东西要学!如果您的范围超过 1 列宽,Field 参数用于选择您要过滤的列?
    • Excel VBA 不是最简单的对象模型。我的建议是了解 Range 对象,并在接受宏记录器提供给您的内容之前三思而后行。是的,您对 Field 参数是正确的。请您通过单击如果您认为它比另一个更好来接受我的回答。谢谢
    【解决方案2】:

    使用以下语法来避免您的问题:

    Ws.Range("A6:e6").AutoFilter '... and so on with exact range address
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多