2016-11-22 34 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請注意,與您原始的workaround_相比,此答案的方法有一個關鍵區別,並且事實上,此方法不需要任何有關「ListObject」字段(「LisColumns.Items」 )是_non-calculated_和哪個Fields _'HasFormula'_,因爲它本身不會添加任何「數據」,而只是向DataBodyRange添加一行,以便生成「LisColumns.Items」的_「hidden」_公式「可見。 – EEM