2016-10-22 3 views
-1

Ich schrieb eine Funktion, die ein Wörterbuch mit Schlüssel => Wertpaare aus einem Excel-Blatt erstellt. Das funktioniert soweit, aber ich habe herausgefunden, dass mein Diktat Schlüssel duplizieren kann, wenn Zellen denselben Wert haben.VBA-Zellen als Schlüssel im Wörterbuch

Kann mir jemand dieses Verhalten erklären?

Function CreateDictionaryBySheet(_ 
SheetName As String, _ 
Optional KeyColumn As Long = 1, _ 
Optional ValueColumn As Long = 2, _ 
Optional StartRow As Long = 2 _ 
) As Object 

Dim MyDictionary As Object 
Set MyDictionary = CreateObject("Scripting.Dictionary") 
Worksheets(SheetName).Activate 

Dim MaxRows As Long 
MaxRows = GetNumberOfRows(SheetName, KeyColumn) 

Dim Row As Long 
For Row = StartRow To MaxRows 

    MyDictionary.Item(Cells(Row, KeyColumn)) = Cells(Row, ValueColumn) 

Next Row 

Set CreateDictionaryBySheet = MyDictionary 

End Function 

Ich schrieb diese Schleife meinen Code zu überprüfen:

Sub Test() 

Dim Key As Variant 
Dim MyDictionary As Object 
Set MyDictionary = CreateDictionaryBySheet("Config") 

For Each Key In MyDictionary 

MsgBox (Key & " => " & MyDictionary(Key)) 

Next Key 

End Sub 

Unter der Annahme, dass die Zellen (2,1) und Zellen (3,1) beide sind "a" und Zellen (2,2) = 1 und cells (3,2) = 2 Ich sehe zwei msgboxes: eins mit "a => 1" und eins mit "a => 2"

Das erscheint mir seltsam, weil ich angenommen habe, es einfach zu sehen eine msgbox nämlich "a => 2"

Danke für Ihre Hilfe! Peter

Antwort

0

Oh, ich herausgefunden nur, dass ich das angenommene Verhalten bekommen, wenn stattdessen Zellwerte reffering:

Dies wird duplizierten Werte erlauben:

MyDictionary.Item(Cells(Row, KeyColumn)) = Cells(Row, ValueColumn) 

Dies nicht:

MyDictionary.Item(Cells(Row, KeyColumn).Value) = Cells(Row, ValueColumn).Value 

Ich denke, das liegt daran, dass Diktat das Cells-Objekt als Schlüssel im ersten Fall genommen hat, was nicht beabsichtigt war.

Verwandte Themen