Добрый день уважаемые форумчане! Столкнулся с такой проблемой - имеется несколько больших сводных таблиц, исходные данные которых ежемесячно обновляются. Суть вопроса в том, что при обновление исходных данных, во все фильтры сводных таблиц так же подгружается новая информация и ее приходится выбирать руками, т.е. это крайне неудобно и затрачивает достаточно много времени. Возможно ли при помощи макроса автоматизировать сей процесс? Т.е. чтобы в фильтрах выбиралось все, кроме условных 2-3 значений, которые из месяца в месяц не изменяются? Заранее благодарен.
Добрый день уважаемые форумчане! Столкнулся с такой проблемой - имеется несколько больших сводных таблиц, исходные данные которых ежемесячно обновляются. Суть вопроса в том, что при обновление исходных данных, во все фильтры сводных таблиц так же подгружается новая информация и ее приходится выбирать руками, т.е. это крайне неудобно и затрачивает достаточно много времени. Возможно ли при помощи макроса автоматизировать сей процесс? Т.е. чтобы в фильтрах выбиралось все, кроме условных 2-3 значений, которые из месяца в месяц не изменяются? Заранее благодарен.Artem9222
Добрый день, я не профи в макросах, вот так я у себя обновлял фильтры, может подойдет?
[vba]
Код
'назначаем переменную pvtTable для работы с сводной таблицей Set pvtTable = Worksheets("СвднКнг").PivotTables("ОтчетныйГодСводнаяТаб") pvtTable.PivotFields("Месяц").ClearAllFilters 'сбрасываем фильтр "Месяц" выбранной сводной таблицы pvtTable.PivotFields("Месяц").EnableMultiplePageItems = True 'разрешаем менять отдельные позиции фильтра "Месяц"
'ставим все галочки на фильтр (возможно эта часть не нужна) For lngCountSvodBook = 1 To pvtTable.PivotFields("Месяц").PivotItems.Count Step 1 pvtTable.PivotFields("Месяц").PivotItems(lngCountSvodBook).Visible = True Next
[/vba]
Добрый день, я не профи в макросах, вот так я у себя обновлял фильтры, может подойдет?
[vba]
Код
'назначаем переменную pvtTable для работы с сводной таблицей Set pvtTable = Worksheets("СвднКнг").PivotTables("ОтчетныйГодСводнаяТаб") pvtTable.PivotFields("Месяц").ClearAllFilters 'сбрасываем фильтр "Месяц" выбранной сводной таблицы pvtTable.PivotFields("Месяц").EnableMultiplePageItems = True 'разрешаем менять отдельные позиции фильтра "Месяц"
'ставим все галочки на фильтр (возможно эта часть не нужна) For lngCountSvodBook = 1 To pvtTable.PivotFields("Месяц").PivotItems.Count Step 1 pvtTable.PivotFields("Месяц").PivotItems(lngCountSvodBook).Visible = True Next
kotlovan, спасибо. А как убрать из фильтров значения, которые содержат в себе, например "учеб.". Т.е. в фильтре огромный список значений и только несколько из них имеют такой префикс, но он может быть как в начале, так и в конце - Учеб. Авто № 343 или же Авто 3... учеб. пытаюсь править PivotItems и делаю так - PivotItems(*учеб.*), но выходит ошибка
kotlovan, спасибо. А как убрать из фильтров значения, которые содержат в себе, например "учеб.". Т.е. в фильтре огромный список значений и только несколько из них имеют такой префикс, но он может быть как в начале, так и в конце - Учеб. Авто № 343 или же Авто 3... учеб. пытаюсь править PivotItems и делаю так - PivotItems(*учеб.*), но выходит ошибкаArtem9222
Сообщение отредактировал Artem9222 - Среда, 29.03.2023, 15:29
Application.ScreenUpdating = 0 With ActiveSheet.PivotTables(1).PivotFields("й") .ClearAllFilters For Each aaa In .PivotItems If aaa.Name Like "*учеб*" Then aaa.Visible = False Else aaa.Visible = True End If Next aaa End With Application.ScreenUpdating = 1
[/vba]
Если одно условие, то можно использовать фильтр "Не содержит" Запишите макрорекодером, получите вот так примерно [vba]
Application.ScreenUpdating = 0 With ActiveSheet.PivotTables(1).PivotFields("й") .ClearAllFilters For Each aaa In .PivotItems If aaa.Name Like "*учеб*" Then aaa.Visible = False Else aaa.Visible = True End If Next aaa End With Application.ScreenUpdating = 1
_Boroda_, спасибо. Частично помогло, но столкнулся со следующей проблемой - где-то "учеб." написано строчными буквами, а где-то заглавными - как исключить и то и другое?
_Boroda_, спасибо. Частично помогло, но столкнулся со следующей проблемой - где-то "учеб." написано строчными буквами, а где-то заглавными - как исключить и то и другое?Artem9222
Ну и сразу на весь модуль игнорирование регистра [vba]
Код
Option Compare Text
Sub tt() Application.ScreenUpdating = 0 With ActiveSheet.PivotTables(1).PivotFields("й") .ClearAllFilters For Each aaa In .PivotItems If aaa.Name Like "*учеб*" Then aaa.Visible = False Else aaa.Visible = True End If Next aaa End With Application.ScreenUpdating = 1 End Sub
[/vba]
Ну и сразу на весь модуль игнорирование регистра [vba]
Код
Option Compare Text
Sub tt() Application.ScreenUpdating = 0 With ActiveSheet.PivotTables(1).PivotFields("й") .ClearAllFilters For Each aaa In .PivotItems If aaa.Name Like "*учеб*" Then aaa.Visible = False Else aaa.Visible = True End If Next aaa End With Application.ScreenUpdating = 1 End Sub
Всем спасибо! Пока разбирался с этим, вылез еще вопрос - в другом фильтре нужно включить все, что попадает в 3 условия: 1. все до 1500 2. все пустое 3. все без названия
2 условия вроде объединить смог, а вот с 3-мя либо ошибка, либо работает через раз: [vba]
Код
If aaa.Name <= 1500 Then
aaa.Visible = 1
ElseIf aaa.Name = "" Then aaa.Visible = 1
ElseIf aaa.Name = "(blank)" Then aaa.Visible = 1
[/vba]
Всем спасибо! Пока разбирался с этим, вылез еще вопрос - в другом фильтре нужно включить все, что попадает в 3 условия: 1. все до 1500 2. все пустое 3. все без названия
2 условия вроде объединить смог, а вот с 3-мя либо ошибка, либо работает через раз: [vba]
Serge_007, да, это я понимаю. Но как тогда выбрать несколько критериев в фильре? вариант меньше 1500 работает. Если выбрать исключительно пустые - тоже. Но соединить 3 в 1 не получается
Serge_007, да, это я понимаю. Но как тогда выбрать несколько критериев в фильре? вариант меньше 1500 работает. Если выбрать исключительно пустые - тоже. Но соединить 3 в 1 не получаетсяArtem9222
Sub tt() Application.ScreenUpdating = 0 With ActiveSheet.PivotTables(1).PivotFields("й") .ClearAllFilters For Each aaa In .PivotItems If aaa.Name = "(blank)" Or aaa.Name <= 1500 Or aaa.Name = " " Then aaa.Visible = 1 Else aaa.Visible = 0 End If Next aaa End With Application.ScreenUpdating = 1 End Sub
[/vba]
На макросе _Boroda_: [vba]
Код
Sub tt() Application.ScreenUpdating = 0 With ActiveSheet.PivotTables(1).PivotFields("й") .ClearAllFilters For Each aaa In .PivotItems If aaa.Name = "(blank)" Or aaa.Name <= 1500 Or aaa.Name = " " Then aaa.Visible = 1 Else aaa.Visible = 0 End If Next aaa End With Application.ScreenUpdating = 1 End Sub
If aaa.Name = "(blank)" Or aaa.Name <= 1500 Or aaa.Name = " " Then
Спасибо. На маленьких значениях работает, а вот если вместо 1500 поставить, например, 12000, то выходит ошибка 1004 куда тут можно копать? ps - уточнение: если в фильтре мало значений и указать например отбор до 12000 то все ок, но если в фильтре куча различных значений, то выскакивает ошибка
If aaa.Name = "(blank)" Or aaa.Name <= 1500 Or aaa.Name = " " Then
Спасибо. На маленьких значениях работает, а вот если вместо 1500 поставить, например, 12000, то выходит ошибка 1004 куда тут можно копать? ps - уточнение: если в фильтре мало значений и указать например отбор до 12000 то все ок, но если в фильтре куча различных значений, то выскакивает ошибкаArtem9222
Сообщение отредактировал Artem9222 - Среда, 05.04.2023, 17:13
Serge_007, да, в маленькой табличке все ок - работает, а вот если в фильтре куча значений, то это не срабатывает.. таблицу, к сожалению приложить не могу. слишком много конфиденциальных данных
Serge_007, да, в маленькой табличке все ок - работает, а вот если в фильтре куча значений, то это не срабатывает.. таблицу, к сожалению приложить не могу. слишком много конфиденциальных данныхArtem9222
Serge_007, очень странно. создал самую простую таблицу с тем же самым фильтром - на ней все работает. Но на основной, где куча других фильтров - ничего не работает.. выдает ошибку 1004
удалось решить таким путем: [vba]
Код
If aaa.Name = "(blank)" Or aaa.Name < 12000 Or aaa.Name = "" Then aaa.Visible = 1 On Error Resume Next
[/vba] не знаю насколько это корректно, но результат есть
Serge_007, очень странно. создал самую простую таблицу с тем же самым фильтром - на ней все работает. Но на основной, где куча других фильтров - ничего не работает.. выдает ошибку 1004
удалось решить таким путем: [vba]
Код
If aaa.Name = "(blank)" Or aaa.Name < 12000 Or aaa.Name = "" Then aaa.Visible = 1 On Error Resume Next
[/vba] не знаю насколько это корректно, но результат естьArtem9222
Сообщение отредактировал Artem9222 - Четверг, 06.04.2023, 15:04