「listobject vba new 参照設定」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
「ListObjectはExcelライブラリのオブジェクトではない」
と誤解してらっしゃる方による検索キーワードでしょう。
ListObjectオブジェクトは、Excelライブラリに含まれるオブジェクトですから、
参照設定する必要はありません。
もちろんコードを書くときにNewキーワードを使う必要もありません。
もしも、AccessなどからExcelへの参照設定が行われていれば、それだけでOKです。ListObjectオブジェクトへの参照設定が別途必要ということはありません。
なぜListObjectへの参照設定が必要と誤解したのかという推測
「listobject vba new 参照設定」
という検索をなさった方が、なぜ参照設定が必要と誤解されたかですが、VBE(Visual Basic Editor)上でコードを書くときに、インテリセンスが効かない、自動メンバー表示が行われないからではないかと推測しています。
ListObjectオブジェクトを操作するコードを書く場合、上記のオブジェクトである、Worksheetオブジェクトを取得するオブジェクト式に続くことになります。
例えば、
アクティブなシート上の1つ目のListObjectオブジェクトを操作するなら、
ActiveSheet.ListObjects(1)
アクティブなブックの一番左のワークシート上の1つ目のListObjectオブジェクトを操作するなら、
Worksheets(1).ListObjects(1)
といったオブジェクト式を書くことになります。
このときに「ListObjects(1).」まで入力しても、インテリセンスは効かず、自動メンバー表示は行われません。
そのため、ListObjectオブジェクトを使うには何らかの参照設定が必要と誤解されたのではないか、と推測しています。
ListObjectのインテリセンスが効かない理由
ListObjectオブジェクトのインテリセンスが効かない理由を理解しましょう。
ListObjectオブジェクトそのものにはまったく問題はありません。
ListObjectオブジェクトの上位のオブジェクトである、Worksheetオブジェクトを取得するオブジェクト式に原因があります。
例えば、アクティブなシートを取得する際に利用するActiveSheetプロパティを利用して「ActiveSheet.」と入力したあとに続くオブジェクト式では、ListObjectオブジェクトに限らず、どんなオブジェクトでもインテリセンスは働きません。
一番左のワークシートを取得する際に利用するWorksheetsプロパティを利用して「Worksheets.」と入力したあとに続くオブジェクト式では、ListObjectオブジェクトに限らず、どんなオブジェクトでもインテリセンスは働きません。
ActiveSheetプロパティや、Worksheetsプロパティに続くオブジェクト式が、曖昧なObjectを返す作りになってしまっているからです。
ListObjectでインテリセンス機能を利用するには
理由・原因よりも、どうしたらインテリセンス機能を利用できるか、のほうが重要な方もいらっしゃるでしょう。
結論は「Worksheetオブジェクト型のオブジェクト変数を利用する」です。
例えば、
ActiveSheet.ListObjects(1)
ならば、
Dim sh As Worksheet
Set sh = ActiveSheet
sh.ListObjects(1)
のように書けばインテリセンス機能を利用できます。
例えば、
Worksheets(1).ListObjects(1)
ならば、
Dim sh As Worksheet
Set sh = WorkSheets(1)
sh.ListObjects(1)
のように書けばインテリセンス機能を利用できます。
- Newer:マクロ入門書籍で説明のない解説も丁寧に
- Older:ActiveWorkbook.Saveの戻り値は?
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » ListObjectでインテリセンスを有効にするには?