使用vba进行过滤时自动过滤不包括所有行

时间:2019-02-12 23:58:01

标签: excel vba

由于某种原因,自动过滤器未将所有行都包含在信息中。我大约有40行信息,但他只包括15行(您可以在图片中看到,似乎自动筛选器表将行号置于蓝色)

Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)
ActiveSheet.Unprotect
Application.EnableEvents = False

Dim sht As Worksheet
Dim LastRow As Long

Set sht = ActiveSheet
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

If target.Row = 1 Then
    If target.Column > 1 Then
        If target.Column = 5 Then
            Cells(target.Row, 6).NumberFormat = "0"

            Cells(target.Row, 9).NumberFormat = "General"
            Cells(target.Row, 9).Value = "Figueira da Foz"
        End If
    End If

    With ActiveSheet
        Dim tableData As ListObject
        Set tableData = .ListObjects("Tabela1")

        If Not tableData Is Nothing Then

            With Range("A3")
                .AutoFilter Field:=1, VisibleDropDown:=False
                .AutoFilter Field:=2, VisibleDropDown:=False
                .AutoFilter Field:=3, VisibleDropDown:=False
                .AutoFilter Field:=4, VisibleDropDown:=False
                .AutoFilter Field:=5, Criteria1:="*" & Cells(target.Row, 5).Value & "*", VisibleDropDown:=False
                .AutoFilter Field:=6, VisibleDropDown:=False
                .AutoFilter Field:=7, Criteria1:="*" & Cells(target.Row, 7).Value & "*", VisibleDropDown:=False
                .AutoFilter Field:=8, Criteria1:="*" & Cells(target.Row, 8).Value & "*", VisibleDropDown:=False
                .AutoFilter Field:=9, VisibleDropDown:=False
                If target.Column = 10 Then
                    If target.Value = vbNullString Then
                        .AutoFilter Field:=10, VisibleDropDown:=False
                    Else
                        .AutoFilter Field:=10, Criteria1:="" & Cells(target.Row, 10).Value, VisibleDropDown:=False
                    End If
                End If
            End With
        End If
    End With
End If
End Sub

如果我改为使用.Range(“ A3:A”&LastRow)放置,则会给出错误“运行时错误'1004':范围类的AutoFilter方法失败”。这个想法是让自动过滤器过滤所有数据,直到最后填充的行,而不仅仅是15

不知道如何解决此问题,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我建议您将其范围更改为表格(菜单项:格式为表格)。它们在VBA中更容易处理。

当过滤器不适用于工作表中的所有行时,没有一种简单的方法可以告诉您(这就是您所经历的)。
另一方面,表本身可以管理自己的行,即,如果您添加更多数据,它就可以增长。

  • VBA中的表格类型:ListObject
  • 分配:Set MyLO = Worksheets(1).ListObjects(1)
    Set MyLO = Worksheets(1).ListObjects("TableName")
  • 返回范围的属性(不要忘记测试If Not MyLo.<Range as defined below> Is Nothing)。
    他们无需写SomeCell.End(xlDown)...
    • 标题:MyLO.HeaderRowRange
    • 数据:MyLO.DataBodyRange
    • 插入行(如果表中没有数据):MyLO.InsertRowRange
    • 总计:MyLO.TotalsRowRange
  • 过滤器:
    With MyLO.AutoFilter ... End With