Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

Professional Opinions
Ask a Question
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

troubleshooting Question

Problem retrieving second level from dictionary of dictionaries (VBA in Excel 2007)

Avatar of sjgrey
sjgreyFlag for Australia asked on
Microsoft OfficeMicrosoft Excel
2 Comments1 Solution683 ViewsLast Modified:
I'm trying to employ the dictionary of dictionaries techniques mentioned in a reply to a recent question about storing information where the number of items to be held is unpredictable.  I'm having trouble retrieving the second level dictionary.

To diagnose what was going on I've set up the following code.

Sub TestingDictionaries()

    Dim Phrases As Scripting.Dictionary         '   Dictionary of Phrases
    Dim WordsInPhrase As Scripting.Dictionary   '   Dictionary of the non trivial words in each phrase
    Dim vPhrases As Variant
    Dim vWords As Variant

    Dim iPhrase As Integer, iWord As Integer
    Dim wsPhrases As Worksheet
    Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Phrases"
    Set wsPhrases = Worksheets("Phrases") ' List of extracted words
    Set Phrases = New Scripting.Dictionary
    Phrases.CompareMode = vbTextCompare

    Set WordsInPhrase = New Scripting.Dictionary
    WordsInPhrase.CompareMode = vbTextCompare
'   Load dummy contents

    For iPhrase = 1 To 10
        For iWord = 1 To 5
            WordsInPhrase.Add iWord, "Word #" & iWord & " in phrase #" & iPhrase
        Next iWord
'   Dump WordsInPhrase back out to test that it loaded
        For iWord = 1 To WordsInPhrase.Count
            wsPhrases.Cells(15 + iPhrase + 1, iWord + 2).Value = WordsInPhrase.Item(iWord)
        Next iWord
        Phrases.Add "Dummy phrase #" & iPhrase, WordsInPhrase
    Next iPhrase
'   ALL OK TO HERE -------------------------------------------------------

    vPhrases = Phrases.Keys
    For iPhrase = 0 To UBound(vPhrases)
        wsPhrases.Cells(iPhrase + 1, 1).Value = vPhrases(iPhrase)
        Set WordsInPhrase = Phrases.Item(vPhrases(iPhrase))
        For iWord = 1 To WordsInPhrase.Count
            wsPhrases.Cells(iPhrase + 1, iWord + 2).Value = WordsInPhrase.Item(iWord)
        Next iWord
    Next iPhrase

End Sub

Down to the comment "ALL OK TO HERE" it behaves as expected.

The variant vPhrases retrieves the keys to the Phrases dictionary fine and the loop For iPhrase/Next iPhrase behaves as it should but the subsidiary dictionary WordsInPhrase is not retrieved by the line

Set WordsInPhrase = Phrases.Item(vPhrases(iPhrase))

The value of WordsInPhrase.Count is zero

I presume It's a simple error on my part but I'm having trouble tracking it down and any assistance will be most welcome.