|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.11.2009, 15:37 | #1 |
Пользователь
Регистрация: 16.05.2009
Сообщений: 64
|
колонки автофильтра
Активно использую на листах автофильтр.
Определить с помощью ВБА размер диапазона автофильтра уже умею, а определять номера колонок, к которым применяется в конкретных ситуациях автофильтр не умею. Это возможно в ВБА? Как? Собственно ноги растут от желания сделать кнопку "Откл_автофильтр". Т.к. фильтровать приходится широкие таблицы по нескольким столбцам сразу. И вот потом в них отключать фильтр уже надоело. Хочется одним кликом. Сделал сначала так, что тупо отключаются фильтры во всех столбцах. Остался осадок в душе. Хочется отключать фильтр только в тех столбцах, к которым он применён. |
28.11.2009, 16:00 | #2 |
Пользователь
Регистрация: 16.05.2009
Сообщений: 64
|
Прозрел
Нашёл требуемое свойство.
|
27.02.2010, 05:03 | #3 |
Пользователь
Регистрация: 27.02.2010
Сообщений: 22
|
Здравствуйте! Вот у меня такой код:
Range("A2:A65536").AutoFilter Field:=1, Criteria1:="3" Теперь как можно заменить эти "тройки", допустим, на другое число после того, как применила автофильтр?
Пользователь
Последний раз редактировалось Рудзфельд; 27.02.2010 в 06:29. |
27.02.2010, 06:28 | #4 |
Пользователь
Регистрация: 27.02.2010
Сообщений: 22
|
Всё. Разобралась. Вот код (если кому понадобится):
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False 'отключаем реакцию на событие. Это нужно для того, чтобы событие Change сработало один раз Range("A2:A65536").AutoFilter Field:=1, Criteria1:="3" With Worksheets(1) If (.AutoFilterMode = True) And (.FilterMode = True) Then With .AutoFilter.Range.Columns(1) For Each iCell In .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlVisible) iCell.Value = "666" Next End With End If End With If Лист1.FilterMode = True Then Лист1.ShowAllData Application.EnableEvents = True 'включаем реакцию на событие End Sub
Пользователь
|
27.02.2010, 07:28 | #5 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
На сколько я понял из вышеприведенного кода, то нужно при изменении значения любой ячейки листа при помощи автофильтра заменить значения ячеек столбца "A", совпадающих с критерием фильтра (3) на заданное (666). Если так, то во-первых, зачем делать ссылку на лист? во-вторых, зачем проверять, установлен ли и применен ли автофильтр, если мы сами это делаем? и в-третьих, применять в данном случае цикл совершенно ни к чему (ну не люблю я их). Учитывая все сказанное, код можно "облегчить" до такого:
Код:
Чем шире угол зрения, тем он тупее.
|
27.02.2010, 09:18 | #6 |
Пользователь
Регистрация: 27.02.2010
Сообщений: 22
|
SAS888, Вы просто настоящий профессионал. Вы можете под моим ником увидеть, что я еще новичок :-)
А вообще я хотела вот что... В Лист1 содержится колонка из чисел (числа там повторяются и их может быть о-очень много). Допустим, число "3" встречается Rows.Count раз. И я бы хотела программно эту "тройку" заменить, к примеру, на 666. Сначала делала циклом For, но это оказалось о-очень долго. Потом подумала, может с использованием автофильтра получится быстрее. Но с автофильтром все равно быстрее в отличие от цикла, но все же приходится ждать. Вот Вы говорите, что не любите циклы. Может можно как-нибудь эту задачу решить без циклов и автофильтров и чтобы работало быстро. Если такое возможно, не подскажете (или покажете) как? Буду рада :-)
Пользователь
Последний раз редактировалось Рудзфельд; 27.02.2010 в 10:48. |
01.03.2010, 08:23 | #7 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Код:
Чем шире угол зрения, тем он тупее.
|
|
01.03.2010, 09:38 | #8 |
Пользователь
Регистрация: 27.02.2010
Сообщений: 22
|
SAS888, спасибо Вам большое :-)
Пользователь
|
02.03.2010, 06:50 | #9 |
Пользователь
Регистрация: 27.02.2010
Сообщений: 22
|
А как можно подобно этому коду
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False: Application.EnableEvents = False [A2:A65536].AutoFilter Field:=1, Criteria1:="3": On Error Resume Next Range([A3], Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlVisibl e) = 5 [A:A].AutoFilter Application.ScreenUpdating = True: Application.EnableEvents = True End Sub удалять строки? Я просто понять не могу, в каком месте вписать команду Delete.
Пользователь
|
02.03.2010, 07:06 | #10 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Можно так:
Код:
Чем шире угол зрения, тем он тупее.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Анализ состояния автофильтра | НеВа6464 | Microsoft Office Excel | 3 | 20.11.2009 15:43 |
Не верная работа автофильтра | DsXack | Microsoft Office Excel | 2 | 06.11.2009 08:50 |
Сохранение - восстановление автофильтра | ALev | Microsoft Office Excel | 2 | 30.07.2009 17:02 |
Работа автофильтра в запороленном листе. | Rom1k06 | Microsoft Office Excel | 2 | 23.04.2009 09:16 |
Глюк автофильтра | Gorizont | Microsoft Office Excel | 8 | 04.08.2008 10:23 |