2016-11-22 3 views
3

データソースとして18個の列を返す外部クエリを持つListObjectがあります。 ListObjectには、以前に追加された4つの計算カラムが追加されていました。データテーブルを持たないExcelテーブル/ ListObjectの計算式の読み方

現在、ListObjectはデータ行が0ですが、データ行は0ですが、計算された列の定義済みの式を読み取ることができないようです。

データソースをリフレッシュし、データソースが少なくとも1行戻った場合、計算された列の数式は読み込み可能になります。同様に、計算されていない列の1つに手動でデータを入力して、少なくとも1つの行がある場合は、計算された列の式が読み込み可能になります。

計算された列の式がであることを確認する方法はありますか?リストオブジェクトにデータを追加しないでください。

答えて

3

ここには、テーブルに行があるかどうかにかかわらず動作する回避策があります。

getListColumnFormulae - テーブル に行を追加 - 全てListColumns ための式を有する1次元ベース1つの配列を塗りつぶし - 行 を削除 - 配列を返し

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

「計算されていない列の1つに手動でデータを入力する場合」の私のオリジナルの回避策に似ています。明らかに、数式はどこかに存在しますが、オブジェクトモデルはそれを公開していないようです。 – ThunderFrame

+1

@ThunderFrame元の回避策と比較した場合、この回答のアプローチには1つの重要な違いがあることに注意してください。このメソッドは、 'ListObject'フィールド(' LisColumns.Items' )は、データセット自体が盲目的に追加されるのではなく、 'DataBodyRange'に1行だけ追加されるので、' NotCalumns.Items 'の_ "hidden" _式を_non-calculated_およびどのFields _ 'HasFormula'_ '目に見える。 – EEM

関連する問題