Как проверить столбец умной таблицы на наличие ЗНАЧЕНИЙ (т.е. в ячейках есть формулы!)?
Код
IsNull(Range("Таблица1[СТОИМОСТЬ]").Text)
Если столбец пустой, то выводится FALSE, если нет, то TRUE. Проблема в том, что в ситуации, когда одна строка в умной таблице, то всегда выводится FALSE, вне зависимости от того заполнена ли единственная ячейка в столбце или нет. Как это исправить?
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, я бы ещё сделал проверку на существование 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
Приписал в первом сообщение уточнение: Было: Как проверить столбец умной таблицы на наличие значений? Стало: Как проверить столбец умной таблицы на наличие ЗНАЧЕНИЙ (т.е. в ячейках есть формулы!)?
Из-за того, что в ячейках формулы, предложенные варианты не подходят. Формулы делают ячейки не пустыми.
=СЧИТАТЬПУСТОТЫ() считает ячейку пустой, даже, если там формула, которая возвращает ""
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
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
Function CheckTblCol(tbl As ListObject, Optional nCol& = 1) As Boolean
Dim x, arr
If tbl.DataBodyRange Is Nothing Then Exit Function
If nCol < 1 Or nCol > tbl.ListColumns.Count Then Stop: End
arr = tbl.ListColumns(nCol).DataBodyRange.Value2
If Not IsArray(arr) Then arr = Array(arr)
For Each x In arr
If IsError(x) Then Stop: End
If Len(x) Then CheckTblCol = True: Exit Function
Next x
End Function
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄