2017-06-15 11 views
0

私は、VBAオブジェクトを持っていると私はエラーを取得しています数値名前でVBAオブジェクトを呼び出そうと

Object.key1.1.property 

子オブジェクトのプロパティを呼び出すようにしようとしているため、ネストされたの名前オブジェクトは、私が

Object.key1.[1].property 

を使用する場合、私はランタイムエラー438

は誰kはい取得数

です今私はどのようにこのプロパティを呼び出すことができますか?

更新:背景情報のビット。オブジェクト(コレクション)は、Json解析マクロを介してJSon文字列から作成されます。地元ウィンドウの画像に基づいてSee snip of the locals window to understand how the collection is organised.

は、私が使用して試してみた:

JsonObject.data0.item(1).AccountTypeID 

を値を取得しますが、項目メソッドは動作しません。

+0

どのような種類のVBAオブジェクトに数値がありますか?インデックスではないと確信していますか? (例えば、 'key1'はコレクションや配列を返すかもしれません。' Object.key1(1) 'としてインデックスを作成し、' Object.key1(1).propertyを使ってコレクション/配列のその位置の 'property'プロパティを取得します。 ') – YowE3K

答えて

0

私は、名前が数字であるVBAでプロパティを作成する方法を想定できないと言わざるを得ない。私はあなたがVBA内でそれを行うことができるとは思わないし、あなた自身のライブラリを作成したとしてもそれができるとは気づいていませんでした。したがって、最も明白な質問は、そのプロパティの参照が正しいことを確認したことですか?

このようなプロパティの理論的な可能性があると仮定すると、CallByName()関数を使用してVBA内で呼び出すことができます。名前でプロパティを取得して文字列として渡すことができます。

のは、あなたがThisWorkbook.ActiveSheet.Rows.Countプロパティにアクセスしたいとしましょう - すなわち、あなたの用語で、目的の子オブジェクトは、Rowsし、その所望の特性Countた - あなたは実際には次の構文を使用してそれを行うことができます:

Dim childObj As Range 

Set childObj = CallByName(ThisWorkbook.ActiveSheet, "Rows", VbGet) 
Debug.Print childObj.Count 

あなたが投稿した問題は、これまでのところフェッチされているので、1というプロパティを持つテストオブジェクトを作成することさえできないので、私はあなたの特定の例でこれを確認することができませんが、おそらく、あなたのため:

Set childObj = CallByName(Object.Key1, "1", VbGet) 
Debug.Print childObj.Property 
関連する問題