Подтвердить что ты не робот

Как отслеживать значения в словаре в окне просмотра Excel VBA?

Я использую словари в Excel VBA через dict As New Dictionary (и добавление ссылки на время выполнения скриптов). Когда я пытаюсь контролировать их во время отладки, я могу видеть только ключи, которые лежат в словаре, но не соответствующее значение каждой клавиши.

Есть ли способ увидеть ценность? Это облегчило бы отладку для меня.

EDIT: на основе ваших ответов нет простого решения, но я могу сделать следующее.

Используйте глобальную переменную Dim d_obj As Object и постоянно ее отслеживайте и всякий раз, когда мне нужно найти значение словаря, я Set d_obj(key) =... в непосредственное окно Set d_obj(key) =... и я смогу увидеть значение в монитор-окно.

Кроме того, я могу написать функцию, которая принимает словарь и возвращает значения в виде списка, и аналогичным образом использовать эту функцию в прямом окне. спасибо всем!

4b9b3361

Ответ 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