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

(Нажмите на изображение, чтобы увеличить)

Я знаю, что есть способ сделать это автофильтром, поскольку данные появляются с помощью макроса. Я пытался понять макрос в течение 5 часов и не могу сделать это правильно. Самое близкое, что я получил, это то, что я установил фильтр, а затем, когда появляются новые данные, он стирает фильтр и складывает все данные вместе. Мне нужен фильтр, чтобы остаться!

Private Sub Worksheet_Change(ByVal Target As Range)

    If Me.FilterMode = True Then
        With Application
           .EnableEvents = False
           .ScreenUpdating = False
        End With

        With ActiveWorkbook
            .CustomViews.Add ViewName:="B2", RowColSettings:=True
          Me.AutoFilterMode = False
            .CustomViews("B2").Show
            .CustomViews("B2").Delete
        End With


         With Application
           .EnableEvents = True
           .ScreenUpdating = True
        End With
    End If

End Sub

1 ответ1

0

По сути, все, что вам нужно, это "обновить" фильтр, сказав Excel, чтобы он фильтровал те же условия для нового диапазона данных.

Обратите внимание, что использование UsedRange подразумевает, что все данные находятся в смежных строках и столбцах. Кроме того, при необходимости измените аргументы AutoFilter .

Поскольку ваши данные связаны с помощью формул, Worksheet_Change никогда не будет срабатывать при обновлении формул. Вам нужно будет использовать событие Worksheet_Calculate , но имейте в виду, что оно будет срабатывать при каждом расчете рабочего листа, что может быть или не быть обременительным.

Я также изменил ваше условное If IF Me.AutoFilterMode = True поскольку FilterMode не будет истинным, если на самом деле ничего не фильтруется, даже если фильтры включены.

Private Sub Worksheet_Calculate()

    If Me.AutoFilterMode = True Then

        With Application
           .EnableEvents = False
           .ScreenUpdating = False
        End With

        Me.UsedRange.AutoFilter 2, "North" 'filters column B for myFilter value change as needed

         With Application
           .EnableEvents = True
           .ScreenUpdating = True
        End With

    End If

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .