Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 04.04.2019
Сообщений: 54
1
Excel

Как проверить на заполненность листа после автофильтра?

09.04.2019, 16:48. Показов 4813. Ответов 6

Author24 — интернет-сервис помощи студентам
Есть макрос, который открывает файл, фильтрует, и после фильтрации выделяет отфильтрованные строки цветом.
Но проблема в том, что после фильтрации на листе может ничего не оказаться, и если пытаться закрасить, то выдаёт ошибку.
Как можно проверить на заполненность? Или с помощью On Error обойти это?
Visual Basic
1
2
oWorkBook1.sheets(1).range(“A1:J700”).autofilter field....
oWorkBook1.sheets(1).range(“A1:J700”).specialcells(xlCellTypeVisible).interior.color=vbRed
Во второй строке вылазит ошибка
Хотелось бы, чтобы если лист пустой, макрос пропускал этот шаг

Добавлено через 32 минуты
И после закраски макрос копирует закрашенное и вставляет в другую книгу, то есть если пропустить закраску, то и последующие 2 шага нужно тоже пропустить
Error go resume next пробовал, программа после этой строки работает некорректно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2019, 16:48
Ответы с готовыми решениями:

Как проверить заполненность мемо?
Нужно проверить на пустоту элемент Memo1, при компилированнии выдает ошибку: 'IsEmty' is not a...

Как проверить скрыта ли кнопка автофильтра
Здравствуйте! Включен автофильтр и программно скрыты кнопки автофильтра (стрелочки, но не во всех...

Как проверить на заполненность группу Edit-ов
Добрый день! Нужна помощь в следующем вопросе. На форме имеется PageControl с четырмя TabSheet. На...

Как проверить заполненность полей в пошаговой форме?
Сделал пошаговую форму с проверкой на заполнение, но не получается переключаться между шагами. В...

6
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
09.04.2019, 19:51 2
Скажите какой критерий фильтрации
0
0 / 0 / 0
Регистрация: 04.04.2019
Сообщений: 54
10.04.2019, 11:11  [ТС] 3
pashulka,
Visual Basic
1
AutoFilter Field:=9, criteria1:=“МИО*”, Operator:=xlAnd
Попробовал через

Visual Basic
1
2
If oWorkBook1.sheets(1).Range(“A1:J700”).SpecialCells(xlCellTypeVisible).count > 0 then
‘И через’      .Count<> “”
Проблема будет уже на эту строку, «не найдено ни одной ячейки, удовлетворяющей указанным условиям»
Если перед if then поставить
Visual Basic
1
debug.print(oWorkBook1.sheets(1).Range(“A1:J700”).SpecialCells(xlCellTypeVisible).count)
то на эту строку вылазит ошибка, что «не найдено ни одной ячейки, удовлетворяющей указанным условиям»
У меня это все в цикле, и ошибка вылазит только после какого-то шага, на том же шаге, что и без debug
Я так понял, что .count возвращает nothing если ничего нет, а не 0
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.04.2019, 11:52 4
В реальности будет работать и без указания видимых ячеек, т.е.

Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim oWorkBook1 As Workbook, criteria$
Set oWorkBook1 = ...
criteria = "МИО*"
 
With oWorkBook1.Worksheets(1).Range("A:J")
     If Application.CountIf(.Columns(9), criteria) > 0 Then
        .AutoFilter Field:=9, Criteria1:=criteria
        .Parent.AutoFilter.Range.Interior.Color = vbRed
     End If
End With
или

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim oWorkBook1 As Workbook, r As Range, criteria$
Set oWorkBook1 = ...
criteria = "МИО*"
 
With oWorkBook1.Worksheets(1)
     Set r = .Range("A1:J1", Cells(.Rows.Count, "I").End(xlUp))
End With
If Application.CountIf(r.Columns(9), criteria) > 0 Then
   r.AutoFilter Field:=9, Criteria1:=criteria
   r.Interior.Color = vbRed
End If
0
0 / 0 / 0
Регистрация: 04.04.2019
Сообщений: 54
10.04.2019, 12:29  [ТС] 5
pashulka, дело в том, что он у меня должен потом то, что отфильтровал, копировать и вставить в другую книгу
При копировании тогда будет ошибка
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
10.04.2019, 12:50 6
Лучший ответ Сообщение было отмечено Sadma1 как решение

Решение

Sadma1, Во-первых не будет
Visual Basic
1
r.Copy Workbooks.Add.Worksheets(1).Cells(1)
во-вторых, кто Вам мешает добавить ненужное действие, как то .SpecialCells(xlVisible)
1
0 / 0 / 0
Регистрация: 04.04.2019
Сообщений: 54
10.04.2019, 14:29  [ТС] 7
Решил по-другому, потому что то, что выше не помогало
Просто вставлял в первую ячейку значение
И после того как копировал и вставлял, удалял ее
0
10.04.2019, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2019, 14:29
Помогаю со студенческими работами здесь

Несовместимость защиты листа и работы автофильтра
Программно скрываю ненужные юзеру столбцы, ставлю защиту на лист, чтобы не смог сделать их...

Как проверить поле на заполненность перед вызовом модального окна?
Здравствуйте. Подскажите, как сделать, чтобы при незаполненном поле модальное окно не открывалось,...

Как использовать данные после автофильтра?
Здравствуйте,уважаемые форумчане! Может,кто сталкивался. Предположим,имеется документ:таблица в...

Проверить массив на заполненность
нужно проверить массив на заполненность. как это сделать? Добавлено через 25 секунд есть ли...

Проверить переменную на заполненность
из 1с 8.2 подключаюсь к 7,7 в переменной висит значение поля номенклатуры типа...

Проверить на заполненность множество Edit-ов
Плиз помогите ! Допустим у меня на form много edit-ов (ну до 500 допустим) Помогите пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru