Как отслеживать значения в словаре в окне просмотра Excel VBA?
Я использую словари в Excel VBA через dict As New Dictionary
(и добавление ссылки на время выполнения скриптов). Когда я пытаюсь контролировать их во время отладки, я могу видеть только ключи, которые лежат в словаре, но не соответствующее значение каждой клавиши.
Есть ли способ увидеть ценность? Это облегчило бы отладку для меня.
EDIT: на основе ваших ответов нет простого решения, но я могу сделать следующее.
Используйте глобальную переменную Dim d_obj As Object
и постоянно ее отслеживайте и всякий раз, когда мне нужно найти значение словаря, я Set d_obj(key) =...
в непосредственное окно Set d_obj(key) =...
и я смогу увидеть значение в монитор-окно.
Кроме того, я могу написать функцию, которая принимает словарь и возвращает значения в виде списка, и аналогичным образом использовать эту функцию в прямом окне. спасибо всем!
Ответы
Ответ 1
Обычно я dict.items
в ближайшее окно, выбираю его и переключаю Shift + F9, чтобы вставить его в окно просмотра.
Кроме того, здесь однострочный для немедленного окна, чтобы перечислить все элементы:
for each i in dic.Items: debug.Print i: next
Ответ 2
Я использую рекурсивную функцию, которая может использоваться для отображения всех переменных простого типа и содержимого всех вложенных словарей в окне просмотра. Это производит вывод в виде:
Fred:rabbit; Tiddles:cat; Fluffy:cat; Food:[1:lettuce; 2:biscuits; ];
где ключи и значения разделены ":", элементы разделены ";", а вложенные словари показаны в квадратных скобках.
Public Function DictionaryContents(ByVal dcDictionary, Optional ByVal boolShowKeyIndex As Boolean = False)
Dim Keys
Keys = dcDictionary.Keys
Dim i As Long
Dim stIndex As String
Dim stOutput As String
stOutput = vbNullString
For i = 0 To dcDictionary.Count - 1
If boolShowKeyIndex Then
stIndex = "(" & i & ")"
End If
stOutput = stOutput & Keys(i) & stIndex & ":"
If IsObject(dcDictionary(Keys(i))) Then
stOutput = stOutput & "[" & DictionaryContents(dcDictionary(Keys(i)), boolShowKeyIndex) & "]"
Else
stOutput = stOutput & dcDictionary(Keys(i))
End If
stOutput = stOutput & "; "
Next i
DictionaryContents = stOutput
End Function