如何在Excel VBA监视窗口中监视字典中的值?

时间:2012-03-21 11:28:14

标签: excel vba excel-vba ms-office access-vba

我通过dict As New Dictionary在Excel VBA中使用词典(并添加对脚本运行时的引用)。当我在调试期间尝试监视这些时,我只能看到字典中的键,而不是每个键的相应值。

有没有办法看到这个价值?它会让我更容易调试。

编辑:根据您的回答,没有简单的解决方案,但我可以执行以下操作。

使用全局变量Dim d_obj As Object并持续监视它,每当我需要查找字典的值时,我输入到即时窗口Set d_obj(key) = ...,我将能够看到值监视器窗口。

另外,我可以编写一个函数,它接收字典并将值作为列表返回,并在直接窗口中类似地使用此函数。感谢所有人!

2 个答案:

答案 0 :(得分:20)

我通常在即时窗口中键入dict.items,选择它并按Shift + F9将其插入监视窗口。

或者,这里是即时窗口的单行,列出所有项目:

for each i in dic.Items: debug.Print i: next

答案 1 :(得分:1)

我使用了一个递归函数,该函数可用于在监视窗口中显示所有简单类型变量和所有嵌套字典的内容。产生的输出格式为:

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