2016-04-28 19 views
0

Ich habe das Problem, dass das Aufrufen der Remove-Methode für das Scripting.Dictionary-Objekt nicht funktioniert.Excel VBA-Wörterbuch Entfernen von Elementen

Dim temp As String 
Set dict = CreateObject("Scripting.Dictionary") 

dict .Add(2,"asd") 
dict .Add(3,"asd") 
dict .Add(4,"asd") 
dict .Add(5,"asd") 
dict .Add(6,"asd") 

For Each Key in dict.Keys 
    temp = Key 
    If(Key > 3) Then 
     dict.Remove(temp) 
    End If 
Next 

Die Ausführung dieses Codes ergibt die gleiche Anzahl von Elementen im Wörterbuch für mich.

Edit: Ich habe nur den Code geändert, um die tatsächliche Nutzung besser widerzuspiegeln. Wie sich herausstellt, ist hier die String-Konvertierung fehlerhaft. Nach dem Umwandeln des Schlüssels in eine Zeichenfolge kann das Wörterbuch die Werte nicht korrekt zuordnen. Leider hat es mir nicht geholfen, eine Lösung für das Problem zu finden.

Edit2: Das Key-Objekt selbst ist vom Typ Range. Die Zuweisung zu einer String-Variablen führt zu dem Problem, dass der Vergleich bei der Operation remove fehlschlägt. Ich habe versucht, Varianten als Alternative zu verwenden, aber der Key wird trotzdem in String umgewandelt.

+0

versuchen dict.Keys() –

+0

Funktioniert nicht. Ich sollte beachten, dass ich keine Fehlermeldung bekomme. Die relevanten Einträge werden einfach nicht entfernt. – narain

+0

Verwenden Sie keine Paranthese in Entfernen –

Antwort

2
Sub x() 

Dim dict As Scripting.Dictionary 
Dim i As Variant 

Set dict = New Scripting.Dictionary 

dict.Add 2, "asd" 
dict.Add 3, "asd" 
dict.Add 4, "asd" 
dict.Add 5, "asd" 
dict.Add 6, "asd" 

For Each i In dict.Keys() 
    if i>3 then dict.Remove i 
Next i 


End Sub 
+0

Immer noch nicht funktionieren – narain

-1

Der Schlüssel ist der zweite Parameter ("asd"), nicht die Nummer, also entfernen Sie eigentlich nichts. Das Umkehren der Reihenfolge der Parameter beim Hinzufügen von itsms sollte funktionieren.

+0

Ich bin mir ziemlich sicher, es ist Schlüssel, Wert: https://msdn.microsoft.com/en-us/library/5h92h863%28v=vs.84%29.aspx – narain

+0

Ooooops! Du liegst ziemlich richtig. Meine Entschuldigung Ein anderer, hoffentlich besserer Gedanke: Ist Ihr Schlüssel kein String-Typ, also obwohl Sie ihn als Zahl hinzufügen, wird er konvertiert? Ich vermute, das könnte Ihren Vergleich zum Scheitern bringen ("3"> 3) – HedgePig

+0

Der obige Code ist nur ein Beispiel. Mein tatsächlicher Code verwendete Zeichenfolgen als Schlüssel. Außerdem wird der Schlüssel in einer String-Variablen in einem Seitenschritt gespeichert, was offensichtlich die Ursache für die fehlende Übereinstimmung ist. – narain

Verwandte Themen