Just nu i M3-nätverket
Jump to content

Dictionary med dictionary med objekt


MattiasQ

Recommended Posts

Hej!

 

Nu har jag stångat skallen blodig och försökt leta efter svaret, men misslyckats. Jag har en Excelfil där man lägger in en massa information. Sedan kan man uppdatera med fler kunder och fler perioder och då vill jag inte att det som fyllts i tidigare ska försvinna. Om det inte varit så att de måste stå i tidsordning hade det varit mycket lättare. Hur som helst, mitt problem är att jag har en dictionary som lägger till period-ID som key och en dictionary som item. Dictionaryn som läggs till har kundnumret som key och en egen klass som item.

 

Så långt är allt väl, men när jag ska få tillbaka värdena så går det inte så bra. Perioden-ID finns, det finns flera items, men jag kan inte komma åt dem.

 

Här läggs värden in:

 For i = 5 To tomCellInt Step 2
   For j = 4 To tomClInt Step 3
     Set tmpinfo = New elsparaCls
     tmpinfo.Andel = .Cells(3, j + 2).Value
     tmpinfo.Summa1 = .Cells(i, j).Value
     tmpinfo.Summa2 = .Cells(i + 1, j).Value
     tmpinfo.Kilo1 = .Cells(i, j + 1).Value
     tmpinfo.Kilo2 = .Cells(i + 1, j + 1).Value

     sparatPerKundDic.Add Key:=.Cells(1, j).Value, Item:=tmpinfo
   Next j
   sparadeElVärdenDic.Add Key:=.Cells(i, 3).Value, Item:=sparatPerKundDic
 Next i

 

Här försöker jag ta ut värden:

MsgBox "Det finns en: " & sparadeElVärdenDic.Exists(namn)
' Den finns
Set kunderPeriod = sparadeElVärdenDic.Item(namn)
MsgBox "Antalet kunderperiod: " & kunderPeriod.Count
' Det finns två kunder under perioden
allaKunderArr = kunderPeriod.Items
MsgBox "Alla kunder är: " & UBound(allaKunderArr)
'och här är alla kunder 0 och det går inte att komma åt några objekt

 

Vad kan jag ha gjort för fel?

 

Vänliga hälsningar,

 

Mattias

 

 

Link to comment
Share on other sites

Inte vet jag exakt vad du gör fel men här får du ett exempel på nästlade Dictionary som fungerar.

Sub demo()
   Dim primeDict As New Dictionary
   Dim secDict As Dictionary
   Dim i As Integer, j As Integer
   For i = 1 To 5
       Set secDict = New Dictionary ' CreateObject("scripting.dictionary")
       For j = 1 To 5
           secDict.Add j, i & "x" & j
       Next j
       primeDict.Add i, secDict
   Next i

   Dim ob As Object
   Dim key As Variant
   Dim it As Variant
   For Each key In primeDict.keys
       Set ob = primeDict(key)
       For Each it In ob.Items
         Debug.Print it
       Next it
   Next key
   Set ob = primeDict(1)
   ' enligt din kod, så som du gör tror jag
   Debug.Print ob.Count
   it = ob.Items
   Debug.Print UBound(it)
End Sub

Om du inte satt referensen till Windows Scripting Runtime kan du använda CreateObject-satsen.

 

Resultatet skrivs alltså ut i direktfönstret.

 

ed: ob-objektet behövs inte, kan ersättas med secDict-objektet om så önskas.

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2009-02-16 17:42:45 av Monshi]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...