5

MS Scripting Runtime ライブラリのディクショナリ オブジェクトを使用して、一連の配列を格納し、必要に応じて配列セルに対して操作を実行しています。これらすべてのエントリを作成するプロセスを実行するための for ループがあります。私の問題は、.existsプロパティを使用するとTrue、アイテムが追加される前でも返されることです。

詳細なデバッグは、.addコマンドが使用されておらず、ループの最後まで使用されない場合でも、for ループの開始時にキーがディクショナリに追加されていることを示しています。

いくつかの異なる構成を試しましたが、失敗する簡単な例を次に示します。

Dim dTotals As Dictionary
Set dTotals = New Dictionary

dTotals.CompareMode = BinaryCompare

For Each cell In rAppID
    If Not dTotals.Exists(cell) Then
    Set rAppIDCells = Find_Range(cell, rAppID)
    Set rAppIDValues = rAppIDCells.Offset(0, 6)
    dAppIDTotal = WorksheetFunction.Sum(rAppIDValues)
    dTotals.Add Key:=cell.Value, Item:=dAppIDTotal
    End If
Next cell

各セルには文字列/一意の ID が含まれています。If ステートメントで、コードは最初の繰り返しでも false を返しています。

4

2 に答える 2

6

「欠落している」キーのアイテムを返そうとする時計を持っていたときに、デバッグ中にこの問題が明らかになりました。実際、[scriptingditonaryObject].exists() 条件付き); 時計のために「欠落している」キーを追加することをお勧めします。ウォッチを削除し、代わりに一時ワークシートを作成して実行中に配列をコピーすると、不要なキーが追加されなくなりました。

于 2015-02-06T21:19:43.787 に答える
5
于 2013-07-27T03:18:51.630 に答える