Excel 2017. 7 листов, 1 фильтр, чтобы изменить их все - PullRequest
0 голосов
/ 04 октября 2018

enter image description here У меня есть 7 рабочих листов, которые делают именно то, что я хочу.Меня сейчас просят фильтр, чтобы показать конкретные годы.Готово.Однако, чтобы посмотреть на год данных тренда, я должен вручную отфильтровать каждый лист.

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

У меня есть =YEAR(O9:O29148) на моем самом большом листе.A8: O8 и все вышеперечисленное абсолютно одинаково на каждом листе, каждый лист имеет одинаковый тип данных в одном и том же столбце.Единственное, что действительно меняется, - это уникальные данные.

Я хочу, чтобы на моей панели инструментов был установлен фильтр Год (2000-2018), который затем отфильтровывает все таблицы, чтобы показать тот же год, или все данные, если это необходимо.

Возможно ли это вообще?

(я не понимаю код VBA, но могу вставить его в редактор VBA, а затем запустить указанный макрос).

Любая помощь будет принята с благодарностью, спасибо!

Ответы [ 2 ]

0 голосов
/ 09 октября 2018
Public Sub Filter_Sheets()

Dim i As Long
Dim comboBox As ControlFormat

With ThisWorkbook
    Set comboBox = .Worksheets(9).Shapes("Drop Down 229").ControlFormat
    For i = 1 To Worksheets.Count
        .Worksheets(i).UsedRange.AutoFilter Field:=15, Criteria1:=comboBox.List(comboBox.ListIndex)
    Next
End With

End Sub

Это лучшее, что мне удалось обнаружить.Я все еще получаю сообщение об ошибке (метод автофильтра класса Range не выполнен).Однако это работает.Теперь я использую комбинированный список, чтобы при необходимости изменить автофильтр на всех 7 листах.Чтобы вернуться назад, чтобы выбрать все, имея «<>» в ячейке раскрывающихся ссылок, работает, чтобы снова выбрать все данные.

0 голосов
/ 04 октября 2018

Не особо зная, как настроены ваши данные, я строю следующее с помощью этого кода в событии worksheet_change на панели инструментов, где у меня E6 контролирует год.У меня есть 3 других листа с данными в столбце A с номерами года, вы можете использовать это в качестве основы.Вам нужно будет поэкспериментировать с вашей колонкой, на фильтре, вероятнее всего, число.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim wsWorksheet As Excel.Worksheet

If Target.Cells(1, 1).Address(False, False) = "E6" and Target.Cells.Count=1 Then

    For Each wsWorksheet In ThisWorkbook.Worksheets
        With wsWorksheet
        If .Name <> Target.Worksheet.Name Then
            If .UsedRange.AutoFilter Then
                .UsedRange.AutoFilter 1, Target.Value
            End If
        End If
        End With
    Next wsWorksheet

End If

End Sub
...