Почему мой автофильтр, используемый для удаления строк с нулями, удаляет заголовки после факта? - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь удалить строки в отчете о расходах, где расходы были 0, так как эта информация не важна.Я использую автофильтр для фильтрации строк только с нулями в столбце суммы и удаляю эти строки.Проблема в том, что когда код переходит к следующему шагу после этой задачи, он оставляет мой отчетный документ без заголовков, которые у него были ранее, и эти заголовки очень важны.

Я попытался изменить диапазон с "AB1: AB "на" AB2: AB ", и это ничего не сделало, и во втором объединенном значении диапазона я попытался изменить" AB "на" AB2 ", что вернуло ошибку, утверждая, что" метод "range" объекта "_global 'не удалось. "

Application.ScreenUpdating = False
        Range("AB1:AB" & Range("AB" & Rows.Count).End(3)(1).Row).AutoFilter 1, 0#, xlAnd, 0
            Range("AB2:AB" & Range("AB" & Rows.Count).End(3)(1).Row).SpecialCells(12).EntireRow.Delete
        ActiveSheet.AutoFilterMode = False
    Application.ScreenUpdating = True

1 Ответ

0 голосов
/ 16 мая 2019

Проблема, с которой вы столкнулись, заключается в том, что если в столбце AB нет нулей, ваш существующий код фильтрует только строку заголовка, а затем удаляет.Я добавил некоторый код, чтобы пройтись по столбцу AB и проверить, существуют ли какие-либо 0 перед действием вашего существующего кода.

Я редактирую этот ответ, он больше не использует ваши методы автофильтра.Приведенный ниже код должен делать то, что вы пытаетесь достичь, и он избавляется от потенциальных проблем с удалением строк внутри цикла, как было выделено в комментариях.

Я снова отредактировал, чтобы исправить проблему, которую вы описали с помощьюзначения кодирования, включающие 0 (например, 10.05).

Sub Delete_Zero_Rows()

Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long

With Worksheets("Sheet1")

    'Set the first and last row to loop through
    Firstrow = .UsedRange.Cells(1).Row
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row

    'Loops from Lastrow to Firstrow (bottom to top)
    For Lrow = Lastrow To Firstrow Step -1

        'Checks the values in column AB
        With .Cells(Lrow, "AB")

            If Not IsError(.Value) Then

                If .Value = "0" Then .EntireRow.Delete

            End If
        End With
      Next Lrow
    End With
End Sub

Не забудьте заменить «Лист1» в моем коде на то, что называется вашим рабочим листом.

Это должно исправить вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...