2017-10-06 4 views
0

関数からListObjectを返すが、暗黙的に文字列に変換するようだ。私は混乱しています。誰かが間違っていることを指摘できますか?ListObject Stringを返す

Sub TestMyFunction() 
    Dim MyTable As ListObject 
    Set MyTable = RangeToTable 
    Debug.Print MyTable '---MyTable = "Table1" 
    MyTable.Unlist 
End Sub 

Private Function RangeToTable() As ListObject 
    Dim wks As Worksheet 
    Set wks = ActiveWorkbook.Worksheets(sREPORT_DATA_1) 

    Dim rngTable As Range 
    Set rngTable = wks.Range("A1").CurrentRegion 

    Set RangeToTable = wks.ListObjects.Add(xlSrcRange, rngTable, , xlYes) 
End Function 
+0

意味が分かりません。 'Address'プロパティは範囲に対応する文字列を返します。 – SJR

+0

@SJR混乱して申し訳ありません。私は自分の投稿を少し編集した。 'MyTable'を印刷すると' Table1'が文字列として出力されます。しかし、私はテーブルオブジェクトではなく、テーブル名を返す必要があります。 VBAに関する私の知識は進歩していますが、私は何かを理解していないかもしれません。 – Brian

+0

それで、あなたはUnlistメソッドを使うことができます。実際に何を達成しようとしていますか? – SJR

答えて

-1

wks.ListObjects.Add(xlSrcRange、rngTable、、xlYes)のListObjectはコレクションです。コレクションアイテムには、名前と値の2つのプロパティがあります。この場合、rngTableに名前を割り当てていないので、名前は "Table1"です。 .Addが実行されると、追加されるコレクション項目には "Table1"の名前が与えられ、値はメモリ内のrngTable構造のアドレスです。

コレクションアイテムであるDebug.Print MyTableを実行すると、コレクションアイテムの既定のプロパティである「Table1」が印刷されます。

Sub TestMyFunction() 
    Dim MyLO As ListObject 
    Set MyLO = RangeToTable 
    Debug.Print MyLO '---MyLO = "Table1" 
    MyLO.Unlist 
End Sub 

Private Function RangeToTable() As ListObject 
    Dim wks As Worksheet 
    Set wks = ActiveWorkbook.Worksheets(sREPORT_DATA_1) 

    Dim rngTable As Range 
    Set rngTable = wks.Range("A1").CurrentRegion 

    Set RangeToTable = wks.ListObjects.Add(xlSrcRange, rngTable, , xlYes) 
End Function 

次のリンクをクリックするとクリアされる場合があります。 How do I reference tables in Excel vba?

+0

私は私がフォローしているか分からない。では、どのように 'ListObject'型のオブジェクトを返すのですか? – Brian

+0

既にListObjectアイテムを返しています。答えにコードを追加して、コード内で何が起こっているのかを理解するのに役立ちます。あなたがそれをMyTableと呼んで以来、あなたがコード化した方法は、ListObjectアイテムが何かを混乱させていました。 Debug.Printを実行すると、テーブルと何か関係があるのではなく、ListObjectの名前が表示されます。答えの一番下にあるリンクを確認してください。 – thx1138v2

+0

テーブルはListObjectsです。あなたがしたのは、私の変数の名前を変更することだけでした。 – Brian

関連する問題