8

私は何が間違っているのですか?私のテストから、objDic.existsは決してFalseを与えません!

    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 -- ""
4

6 に答える 6

13

私が知る限り、Dictionary Object Key は、存在するかのように参照するだけで作成されます。

wscript.echo objDic.Item("test") 'Creates the key whether it exists or not
wscript.echo objDic.Exists("test") 'Will now return true

私の理論を証明/テストするために試すことができるコードがいくつかあります。コードでわかるように、通常は WScript.Echo の代わりに MsgBox を使用します。

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
于 2012-05-07T02:23:03.507 に答える
0

ここで同じ問題が発生しました...
私のコードには、辞書の動的配列があります。
一部のエントリにはキー「HIGH」があり、一部のエントリにはありません。
各エントリのキーの存在をテストすると、常に true が返されました。

for each dictionary_entry in dictionary_array
      if dictionary_entry.Exists("HIGH") then msgbox("Hey, I have a HIGH key, and its value is " + dictionary_entry("HIGH))
next

変数を監視すると、デバッガーはすべての Dictionary_entry に対して「HIGH」キーを作成しました。 コードを正しく機能させるには、監視対象の変数からDictionary_entryDictionary_array
の両方を削除する必要がありました。

于 2015-10-07T17:14:22.203 に答える
0

同じ問題があり、IDE で監視されているすべての変数を削除して修正しました

于 2021-05-01T02:02:07.123 に答える
0

ディクショナリに関係するすべてのウォッチ変数を IDE から削除します。繰り返し可能です。この方法で動作を引き起こしたり修正したりできます (Outlook 2010 VBA IDE)。オブザーバー効果のようなものだと思います。. .

-M

于 2014-03-17T15:28:31.587 に答える
-2

受け入れられた答えは私の質問に答えませんでした。このスレッドはグーグルでの最初の結果であるため、他の人も想像しているので、私の解決策を投稿しています。

キーが存在しない場合は、デフォルトで作成されます。辞書は、存在しない場合にエントリを追加するためのものであるため、以下は常に true を返します。

If objDic.exists("test") then

キーはその存在をテストするときに作成されるため、値は定義されていません。以下は、キーに関連付けられた値がないかどうかをテストします。もちろん、空の値がある場合、これは辞書では機能しません。

If objDic.item("test") <> "" then
于 2013-01-18T20:33:49.793 に答える