2016-04-28 149 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