Хочу организовать фильтрацию по столбцу D через ДропДаун, его содержимое заполняется из списка уникальных значений столбца D, который находится на листе 2. Помогите в написании макроса, который при выборе Названия фирмы в списке фильтрует таблицу, при выборе "Все" - снимает фильтр.
Хочу организовать фильтрацию по столбцу D через ДропДаун, его содержимое заполняется из списка уникальных значений столбца D, который находится на листе 2. Помогите в написании макроса, который при выборе Названия фирмы в списке фильтрует таблицу, при выборе "Все" - снимает фильтр.Огонек
Для меня лично подходит. Но этот файл предназначен для изначально "изнеженных" пользователей, некоторые из которых считают слово Фильтр очень ругательным словом.
Для меня лично подходит. Но этот файл предназначен для изначально "изнеженных" пользователей, некоторые из которых считают слово Фильтр очень ругательным словом.Огонек
Естественно пробовал. Вопрос сводится к одному: что записать после Criteria1:= ? Этот вариант не работает. Впрочем как и другие, которые я пробовал.
[vba]
Код
Dim newf As Single newf = Range("Лист2!$B$1") If newf = 1 Then Selection.AutoFilter Else Range("A3:L3").Select Selection.AutoFilter ActiveSheet.Range("$A$3:$L$26").AutoFilter Field:=3, Criteria1:="=Index(""Лист2!$A$1:$A$18"", newf)" Selection.AutoFilter End If
[/vba] [moder]Оформляйте коды тегами (кнопка #). На первый раз поправила[/moder]
Естественно пробовал. Вопрос сводится к одному: что записать после Criteria1:= ? Этот вариант не работает. Впрочем как и другие, которые я пробовал.
[vba]
Код
Dim newf As Single newf = Range("Лист2!$B$1") If newf = 1 Then Selection.AutoFilter Else Range("A3:L3").Select Selection.AutoFilter ActiveSheet.Range("$A$3:$L$26").AutoFilter Field:=3, Criteria1:="=Index(""Лист2!$A$1:$A$18"", newf)" Selection.AutoFilter End If
[/vba] [moder]Оформляйте коды тегами (кнопка #). На первый раз поправила[/moder]Огонек
Сообщение отредактировал Pelena - Пятница, 03.06.2016, 21:48
Sub DropDown1_Сhange() Dim obj Set obj = Sheets(1).DropDowns(1) If obj.List(obj.ListIndex) <> "" Then If obj.List(obj.ListIndex) <> "Все" Then ActiveSheet.Range("D:D").AutoFilter Field:=1, Criteria1:=obj.List(obj.ListIndex) Else ActiveSheet.Range("D:D").AutoFilter Field:=1 End If End If End Sub
[/vba]
Огонек, попробуйте так: [vba]
Код
Sub DropDown1_Сhange() Dim obj Set obj = Sheets(1).DropDowns(1) If obj.List(obj.ListIndex) <> "" Then If obj.List(obj.ListIndex) <> "Все" Then ActiveSheet.Range("D:D").AutoFilter Field:=1, Criteria1:=obj.List(obj.ListIndex) Else ActiveSheet.Range("D:D").AutoFilter Field:=1 End If End If End Sub
Sub f__01() Application.ScreenUpdating = 0 u = Sheets(2).[b1] If Sheets(2).Cells(1, 2) <> 1 Then ActiveSheet.Range("D:D").AutoFilter Field:=1, Criteria1:=Sheets(2).Cells(u, 1) Else ActiveSheet.Range("D:D").AutoFilter Field:=1 End If Application.ScreenUpdating = 1 End Sub
[/vba]
Мой вариант, назначаем макрос DropDowns [vba]
Код
Sub f__01() Application.ScreenUpdating = 0 u = Sheets(2).[b1] If Sheets(2).Cells(1, 2) <> 1 Then ActiveSheet.Range("D:D").AutoFilter Field:=1, Criteria1:=Sheets(2).Cells(u, 1) Else ActiveSheet.Range("D:D").AutoFilter Field:=1 End If Application.ScreenUpdating = 1 End Sub
Огонек, Честно, я первый раз столкнулся с таким объектом (ДропДаун). Вот поигрался, мб Вас наведёт на мысли. Вы с помощью F8 пошагово пройдитесь. [vba]
Код
Sub test() Dim obj Set obj = Sheets(1).DropDowns(1) MsgBox (obj.Name) Sheets(1).Shapes("1").Select Cells(1, 1).Select obj.Name = "ДропДавнс1" MsgBox (obj.Name) Sheets(1).Shapes("ДропДавнс1").Select Cells(1, 1).Select Sheets(1).DropDowns(1).Select Cells(1, 1).Select Sheets(1).DropDowns ("ДропДавнс1") obj.Name = "1" End Sub
[/vba] Надо отличать :[vba]
Код
.DropDowns(1)
[/vba] - обращение по порядковому номеру и [vba]
Код
.DropDowns("1")
[/vba] - обращение по имени объекта. Для меня больше загадка, почему и как этот объект может относиться и к элементам Shapes и к элементам DropDowns... я думал, что в таких случаях одно множество должно принадлежать другому, но что-то эксперименты не подтвердили это).
Огонек, Честно, я первый раз столкнулся с таким объектом (ДропДаун). Вот поигрался, мб Вас наведёт на мысли. Вы с помощью F8 пошагово пройдитесь. [vba]
Код
Sub test() Dim obj Set obj = Sheets(1).DropDowns(1) MsgBox (obj.Name) Sheets(1).Shapes("1").Select Cells(1, 1).Select obj.Name = "ДропДавнс1" MsgBox (obj.Name) Sheets(1).Shapes("ДропДавнс1").Select Cells(1, 1).Select Sheets(1).DropDowns(1).Select Cells(1, 1).Select Sheets(1).DropDowns ("ДропДавнс1") obj.Name = "1" End Sub
[/vba] Надо отличать :[vba]
Код
.DropDowns(1)
[/vba] - обращение по порядковому номеру и [vba]
Код
.DropDowns("1")
[/vba] - обращение по имени объекта. Для меня больше загадка, почему и как этот объект может относиться и к элементам Shapes и к элементам DropDowns... я думал, что в таких случаях одно множество должно принадлежать другому, но что-то эксперименты не подтвердили это).Roman777