我做错了什么?从我的测试来看,objDic.exists永远不会给出错误!
dim objDic
set objDic = createobject("scripting.dictionary")
objDic.add "test","I have not been deleted"
wscript.echo objDic.item("test") 'Displays -- I have not been deleted
objDic.remove "test"
wscript.echo """" & objDic.item("test") & """" 'Displays -- ""
if objDic.exists("test") then wscript.echo """" & objDic.item("test") & """" 'Displays -- ""
答案 0 :(得分:12)
尽我所知,只需引用一个字典对象密钥就好像它确实存在一样。
wscript.echo objDic.Item("test") 'Creates the key whether it exists or not
wscript.echo objDic.Exists("test") 'Will now return true
以下是您可以尝试证明/测试我的理论的更多代码。我通常使用MsgBox而不是WScript.Echo,正如您将在我的代码中看到的那样。
dim objDic, brk
brk = vbcrlf & vbcrlf
set objDic = createobject("scripting.dictionary")
objDic.add "test","I have not been deleted"
wscript.echo "objDic.Exists(""test""): " & brk & objDic.item("test")
WScript.Echo "Now going to Remove the key named: test"
objDic.remove "test"
MsgBox "objDic.Exists(""test""): " & brk & objDic.Exists("test") 'Returns False
wscript.echo "objDic.item(""test""): " & brk & objDic.item("test") 'Shows Blank, Creates the key again with a blank value
wscript.echo "objDic.item(""NeverAdded""): " & brk & objDic.item("NeverAdded") 'Also shows blank, does not return an error
MsgBox "objDic.Exists(""test""): " & brk & objDic.Exists("test") 'Returns True
答案 1 :(得分:0)
从IDE中删除所有与您的词典有关的监视变量。这是可重复的。您可以通过这种方式导致/修复此行为(Outlook 2010 VBA IDE)。有点像我猜的观察者效应。 。
-M
答案 2 :(得分:0)
这个问题给我带来了很多麻烦。
原来我在代码中的密钥上运行了一个“If”函数,因此它将它添加到字典中。
If dict(key) = "chocolate" then
Check = dict.exists(key) 'Always resolves to true
End If
Whatis = dict(key) 'resolves to ""
因此,if函数的值未添加到字典中,但键已添加。
答案 3 :(得分:0)
遇到同样的问题,删除IDE中所有监视的变量并修复它
答案 4 :(得分:-2)
接受的答案没有回答我的问题。我想其他人也是如此,所以我发布我的解决方案,因为这个帖子是谷歌的第一个结果。
如果密钥不存在,则默认情况下会创建密钥。字典意味着添加条目(如果它们不存在),因此下面将始终返回true。
If objDic.exists("test") then
由于在测试密钥存在时会创建密钥,因此尚未定义该值。下面将测试Key是否没有与之关联的值。当然,如果您有空白值,这将不适用于您的字典。
If objDic.item("test") <> "" then