автофильтр не включает все строки при фильтрации с использованием vba - PullRequest
0 голосов
/ 13 февраля 2019

По какой-то причине автофильтр не включает все строки с информацией.У меня есть около 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 »: сбой метода автофильтра класса диапазона».Идея состояла в том, чтобы автофильтр фильтровал все данные до последней заполненной строки, а не только 15

, не знаю, как это исправить, кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 13 февраля 2019

Я бы предложил вам изменить диапазон, чтобы он стал таблицей (Пункт меню: Формат как таблица).С ними гораздо проще работать в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...