Как отслеживать значения в словаре в окне просмотра Excel VBA? - PullRequest
17 голосов
/ 21 марта 2012

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

Есть ли какой-нибудь способ также увидеть значение?Это сделало бы отладку намного проще для меня.

РЕДАКТИРОВАТЬ: Исходя из ваших ответов, не существует простого решения, но я могу сделать следующее.

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

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

Ответы [ 2 ]

20 голосов
/ 26 марта 2012

Я обычно печатаю dict.items в ближайшем окне, выбираю его и нажимаю Shift + F9, чтобы вставить его в окно просмотра.

В качестве альтернативы, здесь есть строка для непосредственного отображения списка всех элементов:

for each i in dic.Items: debug.Print i: next
1 голос
/ 15 мая 2019

Я использую рекурсивную функцию, которую можно использовать для отображения всех переменных простого типа и содержимого всех вложенных словарей в окне просмотра.Это приводит к выводу в виде:

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
...