Время от времени в словарь добавляется пустой элемент, когда я не проверяю, существует ли ключ. Я знаю, почему это происходит, но не знаю, как проверить, произошло ли это. Например, в сегменте кода ниже;
dictVar("Happy") = 23
dictVar("Lucky") = 666
if (dictVar("Oopsie") = 23) then
{Do Something}
end if
Я по ошибке проверяю запись «Упси». В списке наблюдения Dictionary.keys будут показаны 3 ключа, в списке Dictionary.items — 23 и 66 соответственно для «Happy» и «Lucky». «Упси» показывает «Пусто» в качестве значения (без кавычек), поскольку ключ не существовал, когда я ссылался на него. Ничего удивительного.
Я хотел бы написать процедуру для решения подобных проблем, но не могу найти ничего о том, как проверить элемент словарного ключа на «Пусто». Я пробовал «пусто» и «ничего» — оба терпят неудачу, поскольку значение элемента кажется недоступным.
Все, что я нахожу в Интернете, относится к пустому ключу, и он добавляет, если сначала не проверяет EXISTS, то ничего не добавляет к проверке самого значения элемента.
Есть ли способ проверить это?


Я не уверен, что это то, что вам нужно, но попробуйте...
Если вы хотите проверить, пуст он или нет, используйте альтернативный оператор IF.
Sub Test()
Dim dictVar As Object, Key As Variant
Dim myCheck As Boolean
myCheck = False
Set dictVar = CreateObject("Scripting.Dictionary")
dictVar("Happy") = 23
dictVar("Oopsie") = 9978
dictVar("Lucky") = 666
For Each Key In dictVar.keys
If Key = "Oopsie" And dictVar(Key) = 99 Then
' If Key = "Oopsie" And dictVar(Key) <> "" Then
myCheck = True
Exit For
End If
Next
MsgBox IIf(myCheck, "OK", "Not OK")
End Sub
Ну, это просто странно :( Клянусь, я пробовал раньше, и оператор IF дал сбой. На этот раз это сработало, так что да! Я проверяю, используя .EXISTS при кодировании. Мне просто было любопытно, как это проверить, поскольку сбои обычно происходят из-за ошибка кодирования/логическая ошибка (когда код ожидал наличия определенного ключа, но я закодировал неправильную переменную или условие ключа), которые в любом случае необходимо исправить. Было бы неплохо, если бы вы могли проверить конкретно «Пустой» как. Я видел некоторые возможности, когда пробел может быть допустимым значением элемента. Еще раз спасибо.
Вы пробовали, если Key = "Oopsie" И dictVar(Key) <> "" Тогда
Как я уже сказал, «Oopsie» был всего лишь примером. Когда у меня происходит сбой, это происходит из-за неожиданного события (например, я не знаю, какой ключ используется), поэтому я (я) строил общую ловушку ошибок. <>"" работает в большинстве случаев, если пустой элемент не может быть допустимой записью. В моем случае это правда. Для некоторых это может быть не так. Удивительно, что здесь нет пустой проверки build-it, поскольку Nothing и Empty являются допустимыми сравнениями для других типов переменных, но не для словарей. Пустой элемент является распространенным экземпляром просто из-за того, как обрабатываются переменные Dict. Но ответ, указанный выше, мне подходит.
Если ключ «Oopsie» не существует в словаре, следующий код создаст новый ключ с именем «Oopsie» с пустым значением.
if (dictVar("Oopsie") = 23) then
Прежде чем приступить к использованию оператора if, используйте функцию Exists, чтобы проверить наличие ключа в объекте словаря.
dictVar("Happy") = 23
dictVar("Lucky") = 666
Const SKEY = "Oopsie"
If dictVar.Exists(SKEY) Then
If dictVar(SKEY) = 2 then
{Do Something}
End If
Else
MsgBox "the key " & SKEY & " is not exits"
End If
Сначала проверьте, существует ли ключ, а затем проверьте, является ли значение, связанное с ключом, пустым.