Страницы: 1
RSS
VBA | Как проверить столбец умной таблицы на наличие значений?
 
Как проверить столбец умной таблицы на наличие ЗНАЧЕНИЙ (т.е. в ячейках есть формулы!)?

Код
IsNull(Range("Таблица1[СТОИМОСТЬ]").Text)


Если столбец пустой, то выводится FALSE, если нет, то TRUE.
Проблема в том, что в ситуации, когда одна строка в умной таблице, то всегда выводится FALSE, вне зависимости от того заполнена ли единственная ячейка в столбце или нет.
Как это исправить?
Изменено: tchack - 25.11.2022 18:03:01
 
Например, так:
Код
Sub macro()
Dim rng As Object
With Worksheets("Лист1").ListObjects("Таблица1")
If Not .DataBodyRange Is Nothing Then
    Set rng = .DataBodyRange
    If WorksheetFunction.CountA(rng.Columns(1)) > 0 Then
        MsgBox "Столбец не пустой"
    Else
        MsgBox "Столбец пустой"
    End If
End If
End With
End Sub
Изменено: artemkau88 - 25.11.2022 18:10:20
 
artemkau88, я бы ещё сделал проверку на существование DataBodyRange, а то если удалить все строки из таблицы, то у неё не будет DataBodyRange

Код
Sub macro2()
    Dim Rng As Range
    
    With Worksheets("Лист1").ListObjects("Таблица1")
        If Not .DataBodyRange Is Nothing Then
            Set Rng = .DataBodyRange
            If WorksheetFunction.CountA(Rng.Columns(1)) > 0 Then
                MsgBox "Столбец не пустой", vbInformation, ""
            Else
                MsgBox "Столбец пустой", vbInformation, ""
            End If
        Else
            MsgBox "Таблица пустая", vbInformation, ""
        End If
    End With
End SubIf Not .DataBodyRange Is Nothing Then


Изменено: New - 25.11.2022 17:47:36
 
Приписал в первом сообщение уточнение:
Было: Как проверить столбец умной таблицы на наличие значений?
Стало: Как проверить столбец умной таблицы на наличие ЗНАЧЕНИЙ (т.е. в ячейках есть формулы!)?

Из-за того, что в ячейках формулы, предложенные варианты не подходят. Формулы делают ячейки не пустыми.
 
New, спасибо большое. Буду знать.  :)  
 
Цитата
tchack: Формулы делают ячейки не пустыми
=СЧИТАТЬПУСТОТЫ() считает ячейку пустой, даже, если там формула, которая возвращает ""
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Раз уж написал, можно так:
Код
Sub macro_2()
Dim arr
With Worksheets("Лист1").ListObjects("Таблица1")
If Not .DataBodyRange Is Nothing Then
    arr = .DataBodyRange.Columns(1)
    MsgBox check_arr(arr)
End If
End With
End Sub
Private Function check_arr(arr) As Boolean
Dim i
    check_arr = True
    If IsError(arr) Then check_arr = False: Exit Function
    For Each i In arr
        If i <> "" Then check_arr = False: Exit Function
    Next i
End Function
 
Передать таблицу и номер столбца
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх