Добрый день! Подскажите, у меня разбивка по регионам, в каждом регионе по 4 группы различной информации. Каждый регион в итоге обращается к одному листу, допустим "Аутсорс". В данный момент прописываю автофильтр по критериям (равно) Пример:
Скрытый текст
Код
Sub Аутсорс_актюб()
ActiveSheet.Select
Sheets("Полный мониторинг").Visible = True
ActiveSheet.Visible = False
Sheets("Полный мониторинг").Select
ActiveSheet.Range("B:B").AutoFilter Field:=2, Criteria1:="актюбинский"
End Sub
Так как регионов множество приходится прописывать макрос для каждой группы информации * на кол-во регионов.
Как можно в строке "Criterial1:=" автоматически подтягивать имя листа с которого был сделан переход?
Если получится я так понимаю это превратиться в один макрос для всех переходов. (Надеюсь).
Private Sub Worksheet_Activate()
If preSheetName <> "" Then
ActiveSheet.Range("B:B").AutoFilter Field:=2, Criteria1:=preSheetName
End If
preSheetName = ActiveSheet.Name
End Sub
МатросНаЗебре, Может я не так выразился. Вот Главный лист, с него я перехожу на лист региона, там 4 кнопки которые ведут в 4 листа (все 20 или сколько там регионов ведут в одни и те же листы (Монтаж" и прочие) Мне нужно чтобы когда я попал на лист региона, имя листа региона запомнилось и при нажатии на кнопку "Монтаж" в Критерии автофильтра была ссылка на название Листа с которого был сделан переход. В данный момент автофильтр происход по заданному мню параметру(в примере актюбинский). В итоге мне надо прописать и привязать около 80 макросов автофильтра. Никак не могу найти как в критерии автофильтра прописать имя предыдущего активного Листа чтобы на все 20 региона использовались только 4 макроса.
Sub Актюбинский()
ActiveSheet.Select
preSheetName = ActiveSheet.Name
Sheets("Актюбинский").Visible = True
Sheets("Главная").Select
Range("B2").Select
Sheets("Главная").Visible = False
End Sub
Во второй так:
Код
Sub Монтаж()
ActiveSheet.Select
preSheetName = ActiveSheet.Name
Sheets("Монтаж").Visible = True
ActiveSheet.Visible = False
Sheets("Монтаж").Select
Range("A1").Select
End Sub
В третий так:
Код
Sub Монтаж_актюб()
ActiveSheet.Select
Sheets("Монтаж").Visible = True
ActiveSheet.Visible = False
LastActiveList = Sh
Sheets("Монтаж").Select
ActiveSheet.Range("B:B").AutoFilter Field:=2, Criteria1:=preSheetName
End Sub
Отфильтровалось но неизвестно что, осталась только пустота...
мне кажется что в результате ничего плохого не будет если
Код
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Worksheets(<имя листа с данными и фильтром>).Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
End Sub
Давайте сделаем для одного региона. Далее будет понятно. В модуль листа "Актюбинский" вставьте код:
Код
Private Sub Worksheet_Activate()
preSheetName = ActiveSheet.Name
End Sub
Для того, чтоб это сделать, нужно: правый клик на ярлычке листа "Актюбинский" - Исходный текст. В появившемся окне вставляем этот текст. Возвращаемся в Excel. Кликаем любой лист, кроме "Актюбинский". Возвращаемся на "Актюбинский". Идём на лист, на котором нужно поставить фильтр. Видимо, "Монтаж". Запускаем макрос, устанавливающий фильтр.
Надо выбрать лист "Актюбинский", потом выбрать любой другой лист, потом опять "Актюбинский". Потом лист "Монтаж". Это надо сделать один раз после открытия книги. Или сделать, как БМВ написал.
БМВ,как применить данный макрос к нескольким листам? На первый у меня получилось.
Скрытый текст
Код
Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Worksheets("1").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
End Sub
'''
Sub Workbook_SheetDeactivate2(ByVal Sh As Object)
Worksheets("2").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
End Sub
'''
Sub Workbook_SheetDeactivate3(ByVal Sh As Object)
Worksheets("3").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
End Sub
'''
Sub Workbook_SheetDeactivate4(ByVal Sh As Object)
Worksheets("4").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
End Sub
'''
На листы кроме "1" фильтр не включается.
Изм. Нашел:
Скрытый текст
Код
Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Worksheets("1").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
Worksheets("2").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
Worksheets("3").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
Worksheets("4").Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
End Sub
Sub Workbook_SheetDeactivate(ByVal Sh As Object)
For each WSName in Array("1","2","3","4")
Worksheets(WSName).Range("B:B").AutoFilter Field:=2, Criteria1:=Sh.Name
next
End Sub
Другой вопрос. Как можно переименовать лист по значению ячейки в первом листе? Идея такая все эти 20 регионов уместить в 1 лист, его только переименовывать автоматически и далее как вы уже мне помогли (фильтрует данные по названию листа).
Скрытый текст
Лист 1 (Кнопка1) - Переходит на лист 2, Лист2 - Переименовывется в "Лист1=Ячейка "А1" (кнопка2(На листе Лист2_имяЛист1_ячейка"А1") - переходит в лист с фильтрами и фильтрует по (имя_лист2(которое получило новое имя от Лист1_ячейка"А1")
Возможно это к замкнутому кругу приведет пока не нашел подходящего ответа.