2014-10-27 3 views
1

Я довольно новичок в VBA, и я все еще участвую в фазе обучения.Динамические фильтры (разные строки) для нескольких листов (разные листы в одной книге) VBA- Solved

У меня есть лист под названием «Anwendung» в книге, где в столбце AI есть разные поля, на основе которых я фильтрую. В этом случае это будет «Anwendung». Для этого я сумел Google и настроить определенную часть кода, и код выглядит следующим образом

Sub DynamicFilter() 
SearchCol = "Typ" 
SearchFor = "Anwendung" 
Set rng1 = ActiveSheet.UsedRange.Find(SearchCol, , xlValues, xlWhole) 
Range("A1").Select 
Selection.AutoFilter 
Selection.AutoFilter Field:=rng1.Column, Criteria1:=SearchFor 
End Sub 

Теперь у меня есть несколько других листов в книге, где мне нужно фильтровать их в соответствии с другими строками для например «Ressourcen» в колонке AI. С вышеуказанным кодом я могу просто применить его для активного листа, а не для всей рабочей книги.

Если я определяю Dim ws As Worksheet, а затем запустите цикл for. Затем он фильтрует все листы в книге с помощью «Anwendung» в качестве критериев фильтра, а для определенных листов критерии фильтрации различны.

Sub DynamicFilter() 
Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
ws.Activate 
SearchCol = "Typ" 
SearchFor = "Anwendung" 
Set rng1 = ActiveSheet.UsedRange.Find(SearchCol, , xlValues, xlWhole) 
Range("A1").Select 
Selection.AutoFilter 
Selection.AutoFilter Field:=rng1.Column, Criteria1:=SearchFor 
Next ws 
End Sub 

Все, что мне нужно, это то, как я могу определить несколько фильтров для нескольких листов. Фильтр 1 «Anwendung» для листа 1 и Filter 2: «Ressourcen» для листа 2 в качестве фильтра для другого листа и так далее.

Я действительно был бы признателен, если бы кто-нибудь из вас мог мне помочь.

РЕДАКТИРОВАТЬ - Решено. Чтобы записать макрос, выполните его и немного подкорректируйте. Наконец-то удалось решить проблему.

Sheets("Anwendungen").Select 
 
    ActiveWindow.SmallScroll ToRight:=15 
 
    ActiveSheet.Range("$A$1:$AZ$10637").AutoFilter Field:=35, Criteria1:= _ 
 
     "Anwendung" 
 
    Sheets("Ressourcen").Select 
 
    ActiveWindow.SmallScroll ToRight:=16 
 
    ActiveSheet.Range("$A$1:$AZ$10637").AutoFilter Field:=35, Criteria1:=Array(_ 
 
     "Gebäude", "IT-System", "Netz", "Raum"), Operator:=xlFilterValues

+0

Где хранится «Anwendung»? это в определенной (* той же *) ячейке на каждом листе или в том, что имя рабочего листа? –

+0

@ vba4all- Anwendung - это имя листа, а также хранится как Anwendungen, resourcen, Netz и т. Д. В столбце AI. И я пытаюсь фильтровать имя листа = Anwendung с фильтром в столбце AI = Anwendung и аналогично для ressourcen. – wildradical

+0

@ vba4all- большое спасибо. Но он делает то же самое, что я описал ранее, когда я его использую для. Когда я использую SearchFor.range = ws.Range («AI1»), он фильтрует все строки во всей книге с помощью «Anwendung». Хотя у меня есть лист с именем «Ressourcen», а в столбце AI есть «Resourcen» в качестве значения ячейки. Мне действительно нужно 2 фильтра. Фильтр 1 = Anwendung, который я могу запустить на листе Anwendung. Фильтр 2 = Ressourcen, который я могу получить на листе ressourcen. – wildradical

ответ

0

Если критерием является имя листа все, что нужно назначить имя для SearchFor переменной

Sub DynamicFilter() 
    Dim ws As Worksheet 
    For Each ws In ActiveWorkbook.Worksheets 
     SearchCol = "Typ" 
     SearchFor = ws.Name 
     Set rng1 = ws.UsedRange.Find(SearchCol, , xlValues, xlWhole) 
     ws.Range("A1").AutoFilter 
     ws.Range("A1").AutoFilter Field:=rng1.Column, Criteria1:=SearchFor 
    Next ws 
End Sub 

В случае критериев SearchFor является клеткой вы можете присвойте значение этой ячейки такой переменной:

SearchFor = ws.Range("AI1") 
Смежные вопросы