Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2010, 08:30   #11
Рудзфельд
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 22
По умолчанию

Насчет команды Application.DisplayAlerts=False навряд ли бы догадалсь.
Спасибо большое :-)
Пользователь

Последний раз редактировалось Рудзфельд; 02.03.2010 в 08:35.
Рудзфельд вне форума Ответить с цитированием
Старый 02.03.2010, 08:44   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Опять же, для этой цели вовсе не обязательно использовать автофильтр. Можно и так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False: Application.ScreenUpdating = False
    Dim x As Range: Set x = [A:A].Find(3, , , xlWhole)
    If x Is Nothing Then Exit Sub Else On Error Resume Next
    [A:A].ColumnDifferences(x).EntireRow.Hidden = True
    Cells.SpecialCells(xlCellTypeVisible).Delete: Rows.Hidden = False
    Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 02.03.2010 в 09:14.
SAS888 вне форума Ответить с цитированием
Старый 03.03.2010, 04:37   #13
Рудзфельд
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 22
По умолчанию

В этом коде

Range("A2:A65536").AutoFilter Field:=1, Criteria1:="3"

сортируются только "тройки". А если я хочу отсортировать, допустим, 2, 3, 5, 9, как это сделать?
Пробовала так:

Range("A2:A65536").AutoFilter Field:=1, Criteria1:="2,3,5,9"

и так:

Range("A2:A65536").AutoFilter Field:=1, Criteria1:="2;3;5;9"

Все равно не получается.
Пользователь
Рудзфельд вне форума Ответить с цитированием
Старый 03.03.2010, 05:30   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Автофильтр может работать только с двумя условиями. Например
Код:
.AutoFilter Field:=1, Criteria1:="=2", Operator:=xlOr, Criteria2:="=3"
Для решения Вашей задачи (скрыть требуемые строки), предлагаю не использовать автофильтр. Следующий код скроет все строки, кроме тех, которые в столбце "A" содержат критерии, содержащиеся в массиве a (неограниченное количество).
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False: Application.ScreenUpdating = False
    Dim x As Range, y As Range, z As Range, a(), crit
    a = Array(2, 3, 5, 9) 'Критерии фильтра
    For Each crit In a
        Set x = [A:A].Find(crit, , , xlWhole)
        If Not x Is Nothing Then
            Set y = [A:A].ColumnDifferences(x)
            If z Is Nothing Then Set z = y Else Set z = Intersect(z, y)
    End If: Next
    If Not z Is Nothing Then z.EntireRow.Hidden = True
    Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
P.S. А Вам точно требуется применять фильтр при каждом изменении любой ячейки листа? Может быть достаточно контролировать изменение значений ячеек какого-то конкретного диапазона?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 03.03.2010, 06:11   #15
Рудзфельд
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 22
По умолчанию

Задача в общем такая: в Лист1 делаются какие-то изменения, а в Лист2 эти изменения должны отображаться (НЕ сводные таблицы! Без их использования!). В Лист2 в обяз должны присутствовать автофильтры.
Конечно, увидев эти фильтры, я не сразу подумала, что нужно кодировать с использованием только автофильтров. Нет конечно. Просто я думала, что если использовать автофильтр, то программа будет работать намного быстрее, потому что отфильтрованных значений все равно намного меньше.
Можно работать и без автофильтров.

Вот сейчас мне нужно было вот что. Допустим, в Лист1 содержится столбец из чисел (1, 2, 3, 4, 5, 6 и т. д.). В Лист2 в каком-нибудь столбце также от руки вводятся числа. Если в Лист1 удалить любую строку с числом, например 2, то эта "двойка" должна исчезнуть в Лист2 (если ее вводили). Это у меня всё работает.
Но если пользователь захочет удалять строки диапазоном (а он имеет на это право), то в Лист2 удаляются только те числа, которые находились в выбранном диапазоне в первой строке этого диапазона.
Так вот, как сделать так чтобы в Лист2 удалялись все те числа, которые находились в выбранном диапазоне Лист1?

Я сначала решила отфильтровать все те значения, которые находятся в выбранном диапазоне, а затем разом их все удалить.
Кстати, пользователь может также выборочно выделять строки для удаления. Т. е. например A2, A5, A8, A10, A15, A36 и т. д. И вот эти значения должны исчезнуть в Лист2 (и то если какие-то из них были ввдены в Лист2).
Пользователь

Последний раз редактировалось Рудзфельд; 03.03.2010 в 06:25.
Рудзфельд вне форума Ответить с цитированием
Старый 03.03.2010, 07:48   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не уверен, что правильно Вас понял. Посмотрите вложение. При удалении значений из столбца "A" листа "Лист1", эти же значения будут удалены из столбца "D" листа "Лист2", не зависимо от их количества. Допускается работа как с одиночной ячейкой, так и с произвольным диапазоном.
Вложения
Тип файла: rar Книга1.rar (8.4 Кб, 16 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 03.03.2010, 09:05   #17
Рудзфельд
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 22
По умолчанию

Все правильно, только заданные значения нужно было не заменять на пустые, а удалять динамически. Вместо Replace я пробовала просто написать Delete без всяких параметров, но эта команда удаляет вообще весь столбец D. Как сделать?
Пользователь
Рудзфельд вне форума Ответить с цитированием
Старый 03.03.2010, 11:08   #18
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
только заданные значения нужно было не заменять на пустые, а удалять динамически
Это чуть сложнее. Посмотрите вложение.
Вложения
Тип файла: rar Книга1_2.rar (7.4 Кб, 9 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 03.03.2010, 12:40   #19
Рудзфельд
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 22
По умолчанию

Ну-у если для Вас кажется сложнее, то для меня это вообще... :-) А автофильтры мне не помеха.
Именно так и надо. Сейчас буду разбираться с кодом. Спасибо Вам большое, SAS888. Помогли :-)
Пользователь

Последний раз редактировалось Рудзфельд; 04.03.2010 в 04:42.
Рудзфельд вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анализ состояния автофильтра НеВа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