Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Умные таблицы. Как быстро определить, есть ли в ней данные, Как быстро определить, пустая ли умная таблица
 
Доброго времени суток, Планетяне!

Если в пустой умной таблице (УТ) удалить все строки любого поля, то в ней всё равно останется 1 строка под шапкой.
Если в УТ есть поля с формулами, то при удалении всех строк (одна останется), формулы тоже ОТОБРАЖАТЬСЯ не будут, но, стоит начать её (УТ) заполнять, то всё вернётся.
Если в УТ более 1 строки, то она заполнена (не пустая) и далее я проверяю поля на корректность заполнения.
Если в УТ 1 строка, то она или пустая или заполненная.

Как наиболее быстро определить, пустая ли УТ или заполнена 1 строка?
Разумеется можно через =СЧИТАТЬПУСТОТЫ() и иже с ними, но может есть у неё (УТ) какой-нибудь параметр или подскажете трюк/костыль…

Решение больше нужно для VBA, но устроит любая подсказка
Изменено: Jack Famous - 18 Апр 2019 12:03:02
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
Если в УТ есть поля с формулами, то при удалении всех строк (одна останется), формулы тоже ОТОБРАЖАТЬСЯ не будут, но, стоит начать её (УТ) заполнять, то всё вернётся.
Не смог воспроизвести проблему - ничего не вернулось
Согласие есть продукт при полном непротивлении сторон.
 
Цитата
Jack Famous написал:
Если в пустой умной таблице (УТ) удалить все строки любого поля, то в ней всё равно останется 1 строка под шапкой
В этом случае УТ.DataBodyRange имеет значение Nothing.
Если есть хоть одна строка с формулой, то этот диапазон уже не Nothing, можно проверить .Rows.Count, применить функции СЧЕТ, СЧЕТЗ, СЧИТАТЬПУСТОТЫ (Worksheetfunction.Count и т.д.)
Изменено: Казанский - 18 Апр 2019 12:29:53
 
Sanja,
1. УТ с 2мя сполями с числами и 3им с формулой
2. Удаляем все строки любого из полей (в примере - второго)
3. В ячейке с формулой формулы типа нет (не отображается), но если я начну вводить данные в столбец 1 или 2, то она появится

Это не проблема, это фича, но вопрос-то в другом - можно ли определить (каким-то параметром или свойством УТ) пустая ли она или же в ней есть данные/константы (не формулы). Типа, 1 строка будет и в том и в другом случае… Перебор, CountA и SpecialCells(xlTypeConstants) — это понятно
1.jpg (9.73 КБ)
2.jpg (10.03 КБ)
3.jpg (4 КБ)
Изменено: Jack Famous - 18 Апр 2019 12:32:56
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
удалить все строки любого поля,
Алексей, что-то я не вкуриваю. это как? И был бы пример  - былоб может чуть проще понять что нужно
=COUNTA(Table1) =0 пустая
 
Доброе время суток.
Ещё варианты
Код
ActiveSheet.ListObjects(1).ListRows.Count = 0

Недавно у соседей пробегало
Код
Not ActiveSheet.ListObjects(1).InsertRowRange Is Nothing

InsertRowRange - как раз тот диапазон, когда таблица не содержит строк.
Цитата
Jack Famous написал:
Если в пустой умной таблице (УТ) удалить все строки любого поля
Алексей, а как в умной таблице ухитриться удалить все строки какого-то одного поля, а для других полей их (строки) оставить?
Изменено: Андрей VG - 18 Апр 2019 12:35:33
 
Тут видимо такой случай. В "тест2" = пусто, но если ввести любое значение в "тест" или "тест1", то появляется ранее удалённая формула
 
БМВ, не всё так просто))) выдаёт 1 (из-за формулы, подозреваю)
Код
Sub ОпределитьЗаполненностьУТ()
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects(1)
MsgBox WorksheetFunction.CountA(tbl)
End Sub
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Казанский, прошу прощения - не увидел… MsgBox ActiveSheet.ListObjects(1).DataBodyRange Is Nothing — тоже работает :idea:
Андрей VG, оба варианта сработали! Спасибо!
Цитата
Андрей VG: как ухитриться
:D ну конечно я имел ввиду, что выделяю весь столбец без шапки и удаляю все строки УТ

Dark1589, вопрос не в этом)) это я так - для общего развития показал)
Изменено: Jack Famous - 18 Апр 2019 12:47:34
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Код
Option Explicit
Sub ОпределитьЗаполненностьУТ()
Dim tbl As ListObject: Set tbl = ActiveSheet.ListObjects(1)
' Выбирай любой
'MsgBox WorksheetFunction.CountA(tbl) '- НЕ СРАБОТАЕТ. Всегда выдаёт 1

'MsgBox ActiveSheet.ListObjects(1).ListRows.Count
'MsgBox Not ActiveSheet.ListObjects(1).InsertRowRange Is Nothing
'MsgBox ActiveSheet.ListObjects(1).DataBodyRange Is Nothing
End Sub
любопытно, что после удаления строк (очистка таблицы) или начала ввода (заполнение) даже не обязательно выполнять пересчёт (проверил для всех 3х методов)
Цитата
Казанский: Если есть хоть одна строка с формулой, то этот диапазон уже не Nothing
ну тут опять же нужно прояснить, что, когда все строки удалены, то формулы как-бы нет (не видно), но она как-бы есть (т.к. при вводе данных, всё считается).
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
Страницы: 1
Читают тему (гостей: 1)
Наверх