Страницы: 1
RSS
Снятие фильтра с таблицы перед установкой нового фильтра., Оригинальная тема : Снятие фильтра с таблицы посредством MsgBox,
 
Добрый день!
Прошу помочь: есть таблица, макросом включается фильтр и фильтрует столбец "В" по цвету заливки.
Как можно автоматизировать процесс, чтобы если фильтр включен, то появлялось сообщение "Снимите фильтр" и после нажатия "ОК" фильтр выключался (не очищался, а именно выключался), т.к. при включенном фильтре другой макрос выдает ошибку и часть данных пропадает.
Заранее благодарен!
Изменено: БМВ - 22.09.2022 16:04:55
 
Мда, конечно название темы и предложенная там методика может поставить в тупик.
1. А что хотите видеть после нажатия не OK?
2. Может все решается проще, снятием автофильтра в начале макроса?
По вопросам из тем форума, личку не читаю.
 
Код
If MsgBox("Выключить фильтр?", vbQuestion + vbYesNo, "Фильтр") = vbYes Then ActiveSheet.UsedRange.AutoFilter
 
МатросНаЗебре, как вариант! А если фильтр не включён?
Спасибо!  
 
БМВ, 1.  Чтобы фильтр отключился.
2. Почему то не получается, не подскажите код?  
 
Или как то прописать - если включён, то включить...?
 
evg_glaz,  по названию темы: сам по себе MsgBox не может ни снять фильтр, ни установить его.Он вообще не может ничего ДЕЛАТЬ.
 
Юрий М,  Название темы: Автоматическое снятие фильтра с диапазона, если он (фильтр) включён.  
 
Плохое название. Подумайте сами: как только мы задействуем фильтр, то тут же нужно его автоматически сбросить. Разве у Вас задача в этом заключается?
 
Юрий М, макросом фильтруется таблица, копируется в новую книгу и отправляется по электронной почте.
В книге с данными если использовать макрос поиска при включенном фильтре - выдает ошибку и данные пропадают.
Потому необходимо снять фильтр перед поиском, если забыл снять руками...
Прошу прощения - файл пример не могу выложить - корпоративный интернет (скачать можно, залить - нет).
Спасибо!
 
Цитата
написал:
Юрий М, макросом фильтруется таблица,.....
Это моя предыдущая тема
 
Цитата
evg_glaz написал:
Потому необходимо снять фильтр перед поиском, если забыл снять руками...
поэтому, если не предусмотрена отмена операции, нужно просто снять фильтр и устанавливать новый, без всяких предупреждений и вопросов.
Код
With activesheet
if .autofilter.Filtermode then .ShowAllData
end with
Изменено: БМВ - 22.09.2022 16:02:34
По вопросам из тем форума, личку не читаю.
 
БМВ, ошибка...
Код
Sub Поиск_Выделение()
Dim xRg As Range 'Поиск выделение
Dim xFRg As Range
Dim xStrAddress As String
Dim xVrt As Variant

With ActiveSheet
If .AutoFilter.FilterMode Then .ShowAllData
End With

xVrt = Range("E1")
If xVrt <> "" Then
Set xFRg = ActiveSheet.Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row).Find(What:=xVrt)
If xFRg Is Nothing Then
If Range("E1") = "Сюда № " Then Exit Sub
MsgBox prompt:="Нет такого ", Title:=""
Range("E1").Select
Selection.ClearContents
Exit Sub
End If

Application.ScreenUpdating = False

xStrAddress = xFRg.Address
Set xRg = xFRg
Do
Set xFRg = ActiveSheet.Cells.FindNext(After:=xFRg)
Set xRg = Application.Union(xRg, xFRg)
Loop Until xFRg.Address = xStrAddress
If xRg.Count > 0 Then
xRg.Interior.ColorIndex = 8
xRg.Offset(, 1).Interior.ColorIndex = 8
ActiveSheet.Range("B1:B" & Cells(Rows.Count, "A").End(xlUp).Row).AutoFilter Field:=1, Criteria1:=RGB(0, 255 _
        , 255), Operator:=xlFilterCellColor

xRg.Interior.ColorIndex = xlNone
xRg.Offset(, 1).Interior.ColorIndex = xlNone

Range("E1").Select
Selection.ClearContents
Application.ScreenUpdating = True
End If
End If
End Sub
Изменено: evg_glaz - 22.09.2022 16:18:39
 
Цитата
evg_glaz написал:
ошибка
Я даже догадываюсь, какая и где.
 
RAN, не подскажете ;)  
 
Почему я должен вам подсказывать, какая, и где у вас ошибка?
Это вы должны были сказать.
Тогда, вероятно, вы получили бы ответ с вариантом решения проблемы.
Изменено: RAN - 22.09.2022 17:52:31
 
RAN, Ошибка здесь. А в чем не знаю...

Код
If .AutoFilter.FilterMode Then .ShowAllData
 
Цитата
evg_glaz написал:
А в чем не знаю
У вас фильтр не установлен.  :D
На выбор
Код
Sub qq()
    With ActiveSheet
        If .AutoFilterMode Then If .AutoFilter.FilterMode Then .ShowAllData
    End With
End Sub

Sub ww()
    With ActiveSheet
        If .AutoFilterMode Then
            On Error Resume Next
            .ShowAllData
            On Error GoTo 0
        End If
    End With
End Sub

Sub ee()
    With ActiveSheet
        If .AutoFilterMode Then .[a1].AutoFilter
    End With
End Sub

Но если у вас умная таблица, то и это не проканает.
Изменено: RAN - 22.09.2022 19:17:42
 
RAN, Андрей, а где промежуточный
Код
Sub won()
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
End Sub
По вопросам из тем форума, личку не читаю.
 
Миш, тут уже думать нужно было!  :D
я привык сначала AutoFilterMode проверять.
Изменено: RAN - 22.09.2022 18:32:54
 
RAN, БМВ, МатросНаЗебре, спасибо большое за оказанную помощь и терпение!!!
Страницы: 1
Наверх