Excel это не сложно

Основные форумы => Вопросы по Excel и VBA => Тема начата: Елена@1969@ от 15.07.2020, 15:35:38



Название: Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 15.07.2020, 15:35:38
Добрый день.
Необходимо, чтобы при открытии книги в столбце F происходила автофильтрация от меньшего к большему, Но только если есть в столбце данные (это будут числа).
Мне удалось макрорекордером написать только без условия содержания данных в столбце. И фильтрация происходит даже, если столбец пустой, что мне совсем не надо.
Помогите, пожайлуста, не владею написанием функций макроса.
Вот что у меня получилось:

Код: (vb)
Private Sub Workbook_Open()
'
' Макрос1 Макрос
'

'
    ActiveWorkbook.Worksheets("ИЕПР").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("ИЕПР").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "F11:F10011"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("ИЕПР").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
   End Sub


Комментарий администратора Коды оформляйте тегами VBCode. п.п. 4.25 Правил форума (http://www.excel-vba.ru/forum/index.php?topic=2.0)


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Дмитрий Щербаков(The_Prist) от 15.07.2020, 16:16:11
Как можно понять, что столбец F не пустой? Без макросов - просто понять, как Вам подсказать решение. Без макросов Вы как понимаете, что столбец пустой? Нет ни единой записи или можно опереться на ячейку F11, F12?


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 15.07.2020, 16:28:53
Возможно я как то не верно описала, что хочу.
В эту книгу подтягиваются данные с других (связи).
В столбец F подтягиваются номера "1001", "3002" и т.п.
Надо, чтобы при открытии книги они встали от меньшего к большему.
Но если книга пустая, и в ней пока нет связей и соответственно данных в столбце "F", то не надо, чтобы происходила фильтрация.
Сейчас происходит в этом файле фильтрация по пустым ячейкам столбца


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Дмитрий Щербаков(The_Prist) от 15.07.2020, 16:32:27
и в ней пока нет связей и соответственно данных в столбце "F"
так это я и пытаюсь выяснить :) Мы же не знаем как выглядит Ваша пустая книга :) Она совсем пустая? Или только таблица пустая в ней, но есть заголовки и формулы
В общем случае можно сделать так:
Код: (vb)
Private Sub Workbook_Open()
'
' Макрос1 Макрос
'

'
    If ActiveWorkbook.Worksheets("ИЕПР").Range("F11").Value <> "" Then
      ActiveWorkbook.Worksheets("ИЕПР").AutoFilter.Sort.SortFields.Clear
      ActiveWorkbook.Worksheets("ИЕПР").AutoFilter.Sort.SortFields.Add Key:=Range( _
        "F11:F10011"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
      With ActiveWorkbook.Worksheets("ИЕПР").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
    End If
   End Sub


P.S. Коды в сообщениях оформляйте тегами VBCode. п.п. 4.25 Правил форума (http://www.excel-vba.ru/forum/index.php?topic=2.0)


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 15.07.2020, 16:35:27
Вы прописали, чтобы фильтрация в книге не происходила, если другие столбцы(F11)  пустые.
Правильно понимаю?
Наверное так.
Попробую.
Спасибо


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Дмитрий Щербаков(The_Prist) от 15.07.2020, 16:37:24
если другие столбцы(F11)  пустые
нет, я прописал условие, что будет фильтрация, если ячейка F11 НЕ ПУСТАЯ:
Код: (vb)
If ActiveWorkbook.Worksheets("ИЕПР").Range("F11").Value <> "" Then


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 15.07.2020, 16:43:58
Поняла.
Работает, если указала ячейку F 12.
Спасибо большое!
Может надо было указать, что если другие столбцы пустые, то автофильтр при открытии книги не срабатывает.
Но так тоже отлично!
СПАСИБО!


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Дмитрий Щербаков(The_Prist) от 15.07.2020, 16:56:50
Можно по сути с любым диапазоном проделать нечто подобное. Например, для проверки есть ли данные в ячейках A12:F3000 можно проверку записать так:
Код: (vb)
If IsNull(ActiveWorkbook.Worksheets("ИЕПР").Range("A12:F3000").Text) Then
'в диапазоне есть хотя бы одно значение


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 16.07.2020, 12:15:49
Добрый день, Дмитрий.
Извините, что опять беспокою.
Почему-то при открытии файла возникает ошибка:
#Run-time error '91':
Object variable or with block variable not set#
И эта новая команда (и в первом и во втором вариантах) подсвечивается желтым.


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Дмитрий Щербаков(The_Prist) от 16.07.2020, 13:41:27
Убедитесь, что в активной книге есть лист "ИЕПР". А вообще, если все это надо делать именно в книге с кодом, то ActiveWorkbook везде надо заменить на ThisWorkbook, чтобы обращение шло всегда к книге, в которой записан код, а не к любой активной на этот момент.


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 16.07.2020, 14:11:15
Хорошо.
А я подумала, что требуется что-то объявить переменной.
но я не смогу, читаю, пробую, пока "0"   :'(
Спасибо Вам


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 16.07.2020, 14:38:03
Огромное СПАСИБО!
Работает :)


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Елена@1969@ от 31.07.2020, 13:33:29
Добрый день, Дмитрий.
Возникли трудности с автофильтром.
В столбце «F» применён автофильтр от меньшего к большему (макрос при открытии книги ранее прописали).
Но теперь, если в столбце "Е" есть данные, а в столбце "F" пусто, то строки с таким условием оказываются вверху.
Надо, чтобы если в столбце «Е» есть данные, а в столбце «F» пусто, то переместить строки с такими данными вниз, поставить их сразу после строки в которой есть хоть какие то данные.
При этом условие фильтра от меньшего к большему в столбце "F" должно соблюдаться.
Буду очень благодарна за помощь.


Название: Re:Если в столбце эксель есть данные, то запустить макросом автофильтр
Отправлено: Дмитрий Щербаков(The_Prist) от 31.07.2020, 20:10:04
Елена, этот вопрос не имеет отношения непосредственно к данной теме. Задача у Вас вообще не про фильтр, а про сортировку уже. Притом не самую простую. Создайте новую тему с Вашим вопросом.
Спасибо.