Если в пустой умной таблице (УТ) удалить все строки любого поля, то в ней всё равно останется 1 строка под шапкой. Если в УТ есть поля с формулами, то при удалении всех строк (одна останется), формулы тоже ОТОБРАЖАТЬСЯ не будут, но, стоит начать её (УТ) заполнять, то всё вернётся. Если в УТ более 1 строки, то она заполнена (не пустая) и далее я проверяю поля на корректность заполнения. Если в УТ 1 строка, то она или пустая или заполненная.
Как наиболее быстро определить, пустая ли УТ или заполнена 1 строка? Разумеется можно через =СЧИТАТЬПУСТОТЫ() и иже с ними, но может есть у неё (УТ) какой-нибудь параметр или подскажете трюк/костыль…
Решение больше нужно для VBA, но устроит любая подсказка
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: Если в УТ есть поля с формулами, то при удалении всех строк (одна останется), формулы тоже ОТОБРАЖАТЬСЯ не будут, но, стоит начать её (УТ) заполнять, то всё вернётся.
Не смог воспроизвести проблему - ничего не вернулось
Согласие есть продукт при полном непротивлении сторон
Jack Famous написал: Если в пустой умной таблице (УТ) удалить все строки любого поля, то в ней всё равно останется 1 строка под шапкой
В этом случае УТ.DataBodyRange имеет значение Nothing. Если есть хоть одна строка с формулой, то этот диапазон уже не Nothing, можно проверить .Rows.Count, применить функции СЧЕТ, СЧЕТЗ, СЧИТАТЬПУСТОТЫ (Worksheetfunction.Count и т.д.)
Sanja, 1. УТ с 2мя сполями с числами и 3им с формулой 2. Удаляем все строки любого из полей (в примере - второго) 3. В ячейке с формулой формулы типа нет (не отображается), но если я начну вводить данные в столбец 1 или 2, то она появится
Это не проблема, это фича, но вопрос-то в другом - можно ли определить (каким-то параметром или свойством УТ) пустая ли она или же в ней есть данные/константы (не формулы). Типа, 1 строка будет и в том и в другом случае… Перебор, CountA и SpecialCells(xlTypeConstants) — это понятно
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Казанский, прошу прощения - не увидел… MsgBox ActiveSheet.ListObjects(1).DataBodyRange Is Nothing — тоже работает Андрей VG, оба варианта сработали! Спасибо!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
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
ну тут опять же нужно прояснить, что, когда все строки удалены, то формулы как-бы нет (не видно), но она как-бы есть (т.к. при вводе данных, всё считается).
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄