2016-04-28 182 views
0

我有問題,調用Scripting.Dictionary對象上的Remove方法將無法工作。Excel VBA詞典刪除項目

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 

運行此代碼會爲字典生成相同數量的字典中的項目。

編輯:我只是修改了代碼,以更好地反映實際使用情況。事實證明,字符串轉換在這裏是錯誤的。將鍵轉換爲字符串後,字典無法正確匹配值。不幸的是,這並沒有幫助我解決問題。

Edit2:Key對象本身的類型是Range。將其分配給字符串變量會導致問題,比較在刪除操作上失敗。我嘗試過使用變體作爲替代,但是Key仍然被轉換爲字符串。

+0

try dict.Keys() –

+0

不起作用。我應該注意到我沒有收到錯誤信息。相關條目不會被刪除。 – narain

+0

不要在刪除中使用pamentalization –

回答

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

仍然不會工作 – narain

-1

關鍵是第二個參數(「asd」),而不是數字,所以你實際上並沒有刪除任何東西。當你添加它時,反轉參數的順序應該是有效的。

+0

我很確定它是關鍵,值:https://msdn.microsoft.com/en-us/library/5h92h863%28v=vs.84%29.aspx – narain

+0

噢!你太對了。我的道歉另一個,希望更好的想法:是不是你的關鍵字字符串類型,所以即使你將它添加爲一個數字它正在轉換?我懷疑這可能導致你的比較失敗(「3」> 3) – HedgePig

+0

上面的代碼只是一個例子。我的實際代碼使用字符串作爲關鍵。此外,鍵被保存在一個旁邊的字符串變量中,這顯然是不匹配的原因。 – narain