ディクショナリ オブジェクト (データベース ID と値のペア) にいくつかの項目を追加して、ユーザーがコミットする前に選択内容を確認できるようにしようとしています。ディクショナリに項目を追加する次のコード セクションがあります。追加後、Dictionary.Keys をループし、各キー/値をリストボックスに出力してユーザーに表示します。私のディクショナリ オブジェクトはフォームのパブリック変数であり、Form_Load イベントで設定されます。
Dim PickListID As Integer
If txtPercentOfStream <> "" Then
PickListID = cboCoalTypes
If Not CoalsInStreamDic.Exists(PickListID) Then
CoalsInStreamDic.Add PickListID, txtPercentOfStream
End If
Else
Exit Sub
End If
奇妙なことに、新しいキーと値のペアを追加するたびに、新しいキーの値が、新しいキーに加えて既存のすべてのキーの値になります。
辞書を操作する前後にこの小さなブロックを実行します
Dim key As Variant
For Each key In CoalsInStreamDic.Keys
Debug.Print key & "::" & CoalsInStreamDic.item(key)
Next key
Debug.Print
つまり、ユーザーがボタンをクリックすると、古いキーが元の値を持っていることを確認するために、この上記のブロックが最初に発生すると考えられますが、そうではありません。それらはすでに「新しい値」に置き換えられています。後でブロックを実行すると、これが確認されます。
なぜこうなった?