Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dictionary Object mit mehreren Items je Key/Arrays

Dictionary Object mit mehreren Items je Key/Arrays
22.05.2009 10:54:09
Florian
Hi Excel-Gemeinde!
Mein Ziel ist es, eine Datenbank (n Zeilen, m Spalten) aus n einzelnen Dateien zu erstellen. Um den Erstellungsprozess so schnell wie möglich zu machen gehe ich über Arrays. Da verschiedene Ordner (pdf, xls) mit Dokumenten ausgelesen werden, habe ich bereits mehrere Dictionary-Objekte (jeweils 1 Key, 1 Item je Auftragsnummer, sofern Dokument für die Auftragsnummer vorhanden ist). Die Merkmale "pdf-Dokument x vorhanden j/n" sollen für alle n Auftragsnummern in der Datenbank stehen.
Meine Frage an Euch: kann ich einem Dictionary-Objekt mehrere Items je Key zuweisen oder muss ich, um einem Key (=Auftragsnummer) mehrere Eigenschaften zuzuweisen einen neuen multidimensionalen Array schaffen, in den ich die Werte reinschreibe?
Vielen Dank an alle schon mal im Voraus!
Florian
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dictionary Object mit mehreren Items je Key/Arrays
22.05.2009 11:19:11
ransi
Hallo
Du kannst einem Key ein Array zuweisen.
DAs kannst du dann ganz einfach wieder auslesen.
Mal ein kleines Beispiel:
Option Explicit


Public Sub Aufruf()
Dim MyDic As Object
Dim L As Long
Set MyDic = CreateObject("Scripting.Dictionary")
For L = 1 To 100
    MyDic(L) = machs(Cells(L, 1))
Next
MsgBox MyDic(1)(5)
End Sub



Public Function machs(rng As Range) As Variant
Dim tmp(1 To 5) As Variant
With rng
    tmp(1) = .Value
    tmp(2) = .Top
    tmp(3) = .Height
    tmp(4) = .Interior.ColorIndex
    tmp(5) = .Address
End With
machs = tmp
End Function

Die Zeilennummer von A1:A100 in ein Dictionary.
Das zugehörige Item besteht aus einem Array (1 to 5) in dem einige Zelleigenschaften abgelegt sind.
Das kannst du mühelos auf dein Problem anpassen.
ransi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dictionary Object mit mehreren Items je Key/Arrays


Schritt-für-Schritt-Anleitung

Um ein Excel VBA Dictionary zu erstellen, das mehrere Items pro Key speichern kann, gehe wie folgt vor:

  1. Erstelle ein neues VBA-Modul:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei)", wähle Einfügen und dann Modul.
  2. Füge den folgenden Code ein:

    Option Explicit
    
    Public Sub Aufruf()
       Dim MyDic As Object
       Dim L As Long
       Set MyDic = CreateObject("Scripting.Dictionary")
    
       For L = 1 To 100
           MyDic(L) = machs(Cells(L, 1))
       Next L
       MsgBox MyDic(1)(5) ' Zugriff auf das 5. Element des ersten Keys
    End Sub
    
    Public Function machs(rng As Range) As Variant
       Dim tmp(1 To 5) As Variant
       With rng
           tmp(1) = .Value
           tmp(2) = .Top
           tmp(3) = .Height
           tmp(4) = .Interior.ColorIndex
           tmp(5) = .Address
       End With
       machs = tmp
    End Function
  3. Erklärung des Codes:

    • CreateObject("Scripting.Dictionary") erstellt ein neues Dictionary-Objekt.
    • Der Loop liest die Werte aus den Zellen A1 bis A100 und speichert sie in einem Dictionary, wobei jeder Key eine Zeilennummer ist und das Item ein Array aus Eigenschaften ist.

Häufige Fehler und Lösungen

  • Fehler: "Objekt erforderlich" beim Erstellen des Dictionaries.

    • Lösung: Stelle sicher, dass die "Microsoft Scripting Runtime" aktiviert ist. Gehe zu ExtrasVerweise und aktiviere das Kontrollkästchen.
  • Fehler: "Subscript out of range" beim Zugriff auf Array-Elemente.

    • Lösung: Überprüfe, ob du auf gültige Indizes des Arrays zugreifst. Das Array muss zwischen 1 und 5 indiziert werden, wie im Beispiel gezeigt.

Alternative Methoden

Wenn du mit einem VBA Dictionary arbeiten möchtest, aber keine Arrays nutzen willst, kannst du auch ein VBA Collection verwenden. Hier ist ein Beispiel:

Dim coll As Collection
Set coll = New Collection
coll.Add "Wert1", "Key1"
coll.Add "Wert2", "Key2"

Während Collections weniger flexibel sind als Dictionaries, sind sie einfach zu implementieren, wenn du nur einfache Key-Value-Paare benötigst.


Praktische Beispiele

  1. Speichern von Benutzerdaten:

    Dim userData As Object
    Set userData = CreateObject("Scripting.Dictionary")
    userData("User1") = Array("John Doe", "john@example.com", "Admin")
  2. Zugriff auf Werte:

    Dim email As String
    email = userData("User1")(1) ' Gibt "john@example.com" zurück
  3. Auslesen von Werten:

    Dim key As Variant
    For Each key In userData.Keys
       Debug.Print key & ": " & userData(key)(0) ' Gibt den Namen aus
    Next key

Tipps für Profis

  • Nutze die Funktion vba dictionary get value by key, um gezielt auf Items zuzugreifen.
  • Überlege dir, ob ein vba collection vs dictionary für deinen Anwendungsfall besser geeignet ist.
  • Vermeide das Speichern von sehr großen Datenmengen im Dictionary, da dies die Performance beeinträchtigen kann.

FAQ: Häufige Fragen

1. Kann ich ein Dictionary in ein Array umwandeln?
Ja, du kannst die Werte eines Dictionaries in ein Array umwandeln, indem du eine Schleife verwendest, um die Werte zu extrahieren.

2. Was ist der Unterschied zwischen einem Dictionary und einer Collection?
Ein Dictionary ermöglicht den Zugriff auf Werte über Schlüssel (Keys), während eine Collection keinen direkten Zugriff über Schlüssel bietet und die Elemente nur sequenziell durchlaufen werden können.

3. Wie kann ich mehrere Items für einen Key speichern?
Du kannst einem Key ein Array zuweisen, wie im Beispiel gezeigt. Jedes Array kann mehrere Werte speichern, die dann unter einem einzigen Key abgerufen werden können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige