2016-11-22 3 views
3

У меня есть ListObject с внешним запросом в качестве источника данных, который возвращает 18 столбцов. В элементе ListObject ранее добавлено еще 4 расчетных столбца.Как читать формулы вычисляемых столбцов в таблице Excel/ListObject без каких-либо строк данных

Прямо сейчас, ListObject имеет 0 строк данных, однако, хотя есть 0 строк данных, я, похоже, не могу прочитать предварительно определенные формулы вычисленных столбцов.

Если я обновляю источник данных, а источник данных возвращает не менее 1 строки, то формулы для вычисленных столбцов становятся читабельными. Аналогично, если я вручную вводим данные в один из не рассчитанных столбцов, так что существует хотя бы одна строка, то расчетные формулы столбцов читаемы.

Есть ли способ определить, какие вычисленные формулы столбцов: без, добавление каких-либо данных в объект списка?

ответ

3

Это обходное решение, которое будет работать, будь то стол или нет.

getListColumnFormulae - Добавляет строку в таблицу - Заполняет 1 мерного основание 1 массив с формулами для всех ListColumns - Удаляет строку - возвращает массив

enter image description here


enter image description here


Function getListColumnFormulae(tbl As ListObject) 
    Dim Formulae 
    On Error Resume Next 
    With tbl.ListRows.Add 
     Formulae = Application.Transpose(.Range.Formula) 
     Formulae = Application.Transpose(Formulae) 
     getListColumnFormulae = Formulae 
     .Delete 
    End With 
    On Error GoTo 0 
End Function 

Sub FormulaeMessage() 
    Dim Data 
    Dim tbl As ListObject 
    Set tbl = Worksheets("Sheet2").ListObjects(1) 
    Data = getListColumnFormulae(tbl) 

End Sub 
+0

Как и в моем первоначальном обходном пути «если я вручную вводим данные в один из неисчислимых столбцов». Ясно, что формула существует где-то, но, по-видимому, объектная модель не раскрывает ее. – ThunderFrame

+1

@ThunderFrame Обратите внимание, что существует один ключевой разброс в подходе к этому ответу по сравнению с вашим первоначальным решением work_ound, и это факт, что этот метод не требует каких-либо предварительных знаний о том, какие поля ListObject' ('LisColumns.Items') _non-calculate_ и какие поля _'HasFormula'_, поскольку он слепо добавляет «данные» как таковой, а только одну строку в «DataBodyRange», чтобы сделать «скрытые» _ формулы «LisColumns.Items» 'видимый. – EEM