Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Iteration durch


Betrifft: Iteration durch von: Marc
Geschrieben am: 27.04.2017 11:44:19

Hi,

ich bekomm es nicht gebacken durch mein Dictionary zu iterieren. Habe es jetzt wie unten beschrieben versucht:

Dim Parent As Object
Set Parent = CreateObject("Scripting.Dictionary")
(...)
ParentKeys = Parent.Keys
For i = Parent.Count To 1 Step -1
MsgBox (Parent.Keys()(i))
Next i

Auch der Versuch von MsgBox (ParentKeys(i)) liefert nix. Eigentlich auch klar, weil mein Key ja nicht eine Zahl ist, sondern ein String und entsprechend müsste ich vermutlich mit einem validen Key abfragen. Aber selbst wenn ich das mache kommt am Ende eine Meldung "Typen unverträglich". Davon abgesehen will ich auch gar nicht mit den richtigen Keys interieren, weil das Dictionary dynamisch gefüllt ist und meine Liste potentieller Strings eben nicht immer vollständig vorhanden ist.

Stehe irgendwie auf dem Schlauch...wer kann helfen?

  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Marc
Geschrieben am: 27.04.2017 11:45:02

Sorry - jetzt auch mit richtigem Betreff


  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Daniel
Geschrieben am: 27.04.2017 11:54:42

Hi

meinst du das so:

ParentKeys = Parent.Keys
   For i = Ubound(ParentKeys) to Lbound(ParentKeys) step - 1
   MsgBox ParentKeys(i) & " - " & Parent(ParentKeys(i))
Next i
Gruß Daniel


  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Marc
Geschrieben am: 27.04.2017 12:50:32

Danke. MsgBox ParentKeys(i) liert mir noch den aktuellen Key. Damit komme ich wohl weiter.
Allerdings bekomme ich bei dem zweiten Ausdruck Parent(ParentKeys(i)) einen Fehler: Falsche Anzahl an Argumenten oder falsche Zuweisung zu einer Eigenschaft ?!


  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Daniel
Geschrieben am: 27.04.2017 13:06:26

Hi
sorry, kann ich nicht nachvollziehen.
bei mir funktioniert es ohne Fehler.
was hast du denn deinem Dictionary als Items zugewiesen?
hast du alle Variablennamen richtig geschrieben?
du solltest dein Dictionary nicht "Parent" nennen.
"Parent" ist ein VBA-Schlüsselwort, mit welchem man von einem Objekt auf das übergeordnete Objekt schließen kann (Range(...).Parent ergibt das Worksheet, auf dem die Range liegt)

Gruß Daniel


  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Marc
Geschrieben am: 27.04.2017 13:09:29

Das könnte es vielleicht sein. In meinem Dictionary liegt zu jedem Schlüssel ein weiteres Dictionary mit Key/Value Paar. Gut möglich, dass das hier die Ursache sein könnte, oder?

Dann benenne ich Parent und Child mal entsprechend um - danke für den Hinweis.


  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Daniel
Geschrieben am: 27.04.2017 13:16:52

Wie gesagt, im Dictionary kann das Item alles sein, Wert oder auch Objekt wie z.B. ein weiteres Dictionary.
Mein Beispiel war jetzt nur für den einfachen Wert-Fall geschrieben.
Wenn deine Items Objekte sind, musst du mit ihnen natürlich entsprechend verfahren, so wie es mit dem jeweiligen Objekt erforderlich ist.

Gruß Daniel


  

Betrifft: AW: Iteration durch Scripting.Dictionary von: Rudi Maintaire
Geschrieben am: 27.04.2017 13:20:22

Hallo,
ohne Array:

Sub aaaa()
  Dim objParent As Object, vntKey As Variant
  Dim i As Integer
  Set objParent = CreateObject("scripting.dictionary")
  
  'Dictionary füllen
  For i = 65 To 100
    objParent(Chr(i)) = i
  Next
  
  For Each vntKey In objParent
    MsgBox vntKey & vbLf & objParent(vntKey)
  Next
  
End Sub



  

Betrifft: AW: noch ein Versuch von: Fennek
Geschrieben am: 27.04.2017 13:30:25

Hallo,

wie wäre das:

with createObject("Scripting.Dictionary")
'laden
Cells(1).Resize(.Count, 2) = Application.Transpose(Array(.keys, .items))
end with
mfg