2016-05-08 3 views
0

VBAで使用している関数は、ErrorTagsという変数を返します。この変数は、タイプStringListと定義する必要があります。私がErrorTagsを見るとデバッグウォッチでは、アイテム1、アイテム2などとして返された文字列変数を見ることができます。しかし、これらの変数にアクセスするコードでは何も見つかりません。例えば私は、正しい形式である何あらゆる成功StringList in VBA

なし

Test = ErrorTags.Item 1 

Test = ErrorTags.Item_1 

を試してみましたか?

+1

コレクションの場合は "ErrorTags。 – user3598756

+1

VBAではなくVB.Netが可能でしょうか? – Ambie

答えて

0

ErrorTagsが実際にコレクションであると仮定すると、あなたはこのように考えてあります

ErrorTagsは(あなたがウォッチリストに表示さアイテム)に関連付けられているすべての値を保持するオブジェクトです。そのオブジェクトには、デフォルトのプロパティItemがあります。そのプロパティは、オブジェクトに格納されているすべての値を返すことができますが、一度に1つのみを返します。どの返される、プロパティに渡すパラメータに依存します:

ErrorTags.Items(1) 

これは、コレクションに保存された最初の項目を返します。このパラメータは、コレクション内のすべてのアイテムに対処できるインデックスとして機能します。 VBAの一部のコレクションは文字列をインデックスとして受け入れますが、これはコレクションの種類によって異なります。たとえば、Excelでは、ブックのSheetsプロパティは、コレクション(Excelファイル内のすべてのワークシートを含む)を返します。そのコレクションはインデックスとしての数字だけでなく、シート名をインデックスとして使用します。

上記のように、コレクションのItemプロパティは、のデフォルトのプロパティです。 VBAでは、オブジェクトはデフォルトプロパティを持つことができます。つまり、省略することができます。あなたのコレクションから最初の項目は、したがって、次のように書くことができるアクセスするには、次の

ErrorTags(1) 

は今、あなたはおそらく、時にはループの中で一つの項目が、それらのすべてではないだけにアクセスしたいです。カウンターをコレクションのインデックスとして使用して、Forループでこれを行うことができます。
しかし、より良い方法があります:

あなたは、コレクションのすべての項目を反復処理することができFor Eachループを使用して
Dim et As Variant 

For Each et In ErrorTags 
    ' now you have one item stored in et, do with it as you like 
Next et 

は(それはまた、配列のために動作します)。各パスについて、現在の項目は変数etに書き込まれます。ループ中であれば、ErrorTags.Items()の代わりにその変数を使用してください。ループの本体にDebug.Print etを置くと、ErrorTagsコレクション内のアイテムが単純な文字列であると仮定すると、それらのすべてを直接ウィンドウに出力することができます。

あなたのコレクション内の項目は、オブジェクト自体である場合、あなたはそのオブジェクト型に変数etの宣言を変更する必要があります。For Eachループについて

Dim et As ErrorTag ' assuming that is the object type 

詳しい情報はthe documentationから入手することができます。

関連する問題