2011-12-30 16 views
3

Hashtable(mscorlib.dll参照)を使用しています。私はデータでそれを塗りつぶし、アイテムを取得することができます(要求タイプをハッシュテーブルに格納されているタイプとまったく同じタイプに変換する限り).ContainsValue/Key - すべて動作します。しかし、私はFor Eachループでそれを繰り返すことはできません。 私はインターネット上で見つけることができたすべてのメソッドを試しました(要素ごとに、GetEnumeratorを使用して要素がDictionaryEntryである)が、動作しません - 列挙子を介してテーブルをロールオーバーできますが、 iteratorがどこに置かれているかの値もキーも値でもありません。私は間違って何をしていますか? 私は一時的に数値にキーを設定し、その数値を反復して解決しましたが、最終的に同じ数が2回繰り返されるため、機能しません。VBA(Excel)でHashtableを反復できません

PS: ContainsKeyとContainsValueの両方が必要で、キーまたは値で項目を取得できるため、Hashtableの一部です。

EDIT:私の現在のコード(私が探しています何がループ「私は、」交換することですので、私は、私はすでに知っている数字であることを、キーを必要としない)

For i = 1 To UBound(rands) 
     chopped_yes = Split(ThisWorkbook.Worksheets(1).Range("Z" & rands(i))) 
     chopped_no = Split(ThisWorkbook.Worksheets(1).Range("AA" & rands(i))) 
     chopped_any = Split(ThisWorkbook.Worksheets(1).Range("AB" & rands(i))) 
     For Each part In chopped_yes 
      If rules_yes.ContainsValue(cscs.item(CLng(rands(i)))) Then 
       validcsc = 0 
       GoTo WriteIt 
      End If 
     Next part 
     For Each part In chopped_no 
      If rules_no.ContainsValue(cscs.item(CLng(rands(i)))) Then 
       validcsc = 0 
       GoTo WriteIt 
      End If 
     Next part 
     For Each part In chopped_any 
     pepa = cscs.item(CLng(rands(i))) 
     chopped_pepa = Split(pepa, "=") 
      If rules_any.ContainsValue(CStr(chopped_pepa(0))) Then 
       validcsc = 0 
       GoTo WriteIt 
      End If 
     Next part 
    Next i 

コードは何:


のCSCのハッシュテーブルは、キーワード/ option_valueペア、他の人といくつかのキーワードの競合が含まれている、(rules_any /はい/いいえ0にキーワード紛争、確認1がキーワードである場合= YES/NO/SOMETHINGと設定validcscが含まれているハッシュテーブルません一種の無効なキーワードの組み合わせ)。


ランズユニークな数字の配列である - のトラブルは、複数の競合のキーワードがある場合は、その後、私は後で知っていると

+0

現在のコードを掲載することはできますか? – brettdj

+0

OPを自分のコードで更新しました – Destabilizator

+0

VBAはDictionaryEntry型(eletmanのハッシュテーブル)もICollection型(これは.Keysメソッドが返すものです)を処理できないため、自分のライブラリを作成しました。 – Destabilizator

答えて

5

が実際にVBAから.NETのハッシュテーブルを閲覧するための一つの方法があります:

Dim hash As mscorlib.Hashtable 
Set hash = New mscorlib.Hashtable 

Call hash.Add("foo", "bar") 
Call hash.Add(4, 8) 

Dim keys As IEnumerable 
Set keys = hash.keys 

Dim key As Variant 
For Each key In keys 

    Dim value As Variant 

    value = hash.Item(key) 
Next 

ことで、それを使用してIEnumerableを前にプロパティ「キー」の戻り値を「キャスト」の主な問題"for each"ループ。 VBAは最初から複数のインターフェイスの継承を処理することはできません。関数/プロパティが呼び出される前に、そのインターフェイスにキャストする必要があります。

+0

メモ、VBAプロジェクト(mscorlib.tlbを参照)でmscorlib.dllへの参照を追加する必要があります。 – omegastripes

1
を反復処理するためにそれを使用するキーとして設定するには、任意の数を持っていないです

VBAはDictionaryEntry型(ハッシュテーブルの要素)もICollection型(これは.Keysメソッドが返すもの)も処理できないため、自分のライブラリを作成するだけの解決策でした。

関連する問題