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

Collections innerhalb einer Collection

Forumthread: Collections innerhalb einer Collection

Collections innerhalb einer Collection
29.06.2014 00:32:46
Kuttel
Hallo zusammen,
ich bin leider etwas verwirrt, wenn es um das zuweilen recht komplexe Thema Collections geht. :-(
Man stelle sich vor, ich habe eine Collection (A). Darin enthalten sind vier Collections (A1, A2, A3, A4). Jede dieser vier colletions enthält nun eine jeweils unterschiedliche Anzahl einer Variablen (eines selbstdefinierten Datentyps). Hier nun meine Frage: Ich möchte z.B. auf die dritte Variable in Collection A2 zugreifen und diese verändern. Danach möchte ich die veränderte Variable dorthin zuruck schreiben wo ich sie her hatte. Dabei sollen alle anderen Variablen in dieser Collection A2 unverändert bleiben und andere Colletions (A1, A3 und A4) natürlich auch. Kann mir jemand behilflich sein und mir beispielhaft sagen, wie ich auf eine Variable einer (Sub-)Collection zugreife und diese Variable an die gleiche Stelle wieder zurück schreibe und somit die ursprüngliche Variable überschreibe... Das würde mir sehr weiterhelfen.
Vielen Dank schon einmal im Voraus für die Mühen!
Gruß
Kuttel

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Collections innerhalb einer Collection
29.06.2014 00:43:50
Mullit
Hallo,
hier mal ein Klasse-Tutorial über Collections( + Arrays),
Ist zwar aus Access Sicht, aber sollte 1:1 nach Excel-VBA übertragbar sein....
Gruß,

AW: Collections innerhalb einer Collection
29.06.2014 09:26:28
Nepumuk
Hallo,
eines selbstdefinierten Datentyps
Das geht nicht. In einer Collection kannst du nur Objekte oder einfache Variablen speichern. Also alles was du in einen Variant packen kannst. Du kannst benutzerdefinierte Datentypen in einer Collection durch ein Auflistungsklasse ersetzen. Dabei wird die Klasse in einer Collection verpackt.
Wenn du auf einen bestimmten Eintrag einer Collection zugreifen willst brauchst du entweder seinen Key oder seinen Index.
Gruß
Nepumuk

Anzeige
AW: Collections innerhalb einer Collection
29.06.2014 12:25:44
Kuttel
Hallo noch einmal,
Dank des wirklich sehr guten Tutorials bin ich nun etwas schlauer geworden. Frage mich aber dennoch, wie ich eine Variable (angenommen vom Typ VARIANT) aus einer Sub-Colletion heraushole und an die gleiche Stelle wieder zurückschreibe. Auslesen bekomme ich nun wohl hin, aber an die gleiche Stelle schreiben...? Wenn ich .add benutze wird die Variable ja erneut hinzugefügt und nicht überschrieben oder...?
Gruß
Kuttel

Anzeige
AW: Collections innerhalb einer Collection
29.06.2014 12:55:23
Daniel
Hi
Meines Wissens nach kannst du die Elemente einer Collection nicht ändern oder austauschen.
Wenn du bspw. den Eintrag Index 3 ändern willst, musst du diesen Eintrag löschen und einen neuen hinzufügen mit der Zusatzanweisung: nach Index 2 bzw. vor Index 3
Gruß Daniel

Anzeige
Element innheralb einer Collection überschreiben..
29.06.2014 13:07:12
Kuttel
Hallo,
Hier vielleicht mal ein konkretes Beispiel:
wie kann ich den Wert einer Variablen innerhalb einer Collection ändern und dabei die Position unverändert lassen, genauso wie andere Collections und Elemente?
Dim CollExtract as Collection
Dim Variable as Variant
Set CollExtract = SammelCollect(2) 'Gibt 2. Element der Collection zurück = eine Sub-Collection
Variable = CollExtract(4) 'Gibt 4. Element der Sub-Collection zurück = eine Variable
Variable = Variable + 1

Muß ich die Variable nun wieder in die Colletion zurück schieben?:

CollExtract.Remove(4)
CollExtract.Add(Variable,,,3)

Reicht das an dieser Stelle aus oder muss nun auch die Sub-Collection in die übergeordnete Sammel-Collection (per .Remove und .Add) wieder neu eingebracht werden? Durch die Set-Anweisung [Set CollExtract = SammelCollect(2)] bearbeite ich doch hoffentlich die Collection direkt und Änderungen werden somit übernommen, oder nicht...?
Danke und Gruß
Kuttel

Anzeige
Probiere es doch einfach aus!
29.06.2014 13:17:53
Daniel
Versuch macht kluch, wie mein Ex-Chef zu sagen pflegte.
Gruß Daniel

Element innheralb einer Collection überschreiben..
30.06.2014 10:10:48
Nepumuk
Hallo,
das geht nicht. Du kannst weder das Item noch den Key in einer Collection nachträglich ändern. Das geht nur über löschen und neu einfügen wie Daniel schon schrieb.
Du hast zwei Möglichkeiten.
1. Wenn du an Stelle der Collection eine Auflistungsklasse benutzt, kannst du die Items ohne löschen ändern und es bleibt alles im Standard-VBA. Zudem kannst du damit deinen benutzerdefinierten Datentyp simulieren.
2. Du benutzt an Stelle der Collection-Klasse die Dictionary-Klasse. Diese lässt das nachträgliche Ändern des Items wie des Keys zu. Aber auch diese Klasse kann keine benutzerdefinierten Datentypen speichern. Zudem hat sie einen entscheidenden Nachteil. Die Klasse ist ein Objekt der scrrun.dll welche ein Bestandteil des Windows-Scripting ist. Wenn deine Firma einen Scriptblocker einsetzt, kann es sein dass der Zugriff auf die dll eure IT-Abteilung alarmiert. Da auch Mailsysteme eingehende Mails daraufhin untersuchen, kann es zudem passieren, dass du diese Mappe per Mail nicht an bestimmte Firmen schicken kannst.
Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Collections innerhalb einer Collection in Excel VBA


Schritt-für-Schritt-Anleitung

Um mit einer VBA Collection of Collections zu arbeiten, folge diesen Schritten:

  1. Erstelle die Haupt-Collection:

    Dim SammelCollect As Collection
    Set SammelCollect = New Collection
  2. Füge Sub-Collections hinzu:

    Dim SubColl1 As Collection
    Set SubColl1 = New Collection
    SammelCollect.Add SubColl1  ' Füge erste Sub-Collection hinzu
  3. Füge Items zur Sub-Collection hinzu:

    SubColl1.Add "Erster Wert"
    SubColl1.Add "Zweiter Wert"
  4. Zugriff auf ein Element einer Sub-Collection:

    Dim Wert As Variant
    Wert = SammelCollect(1)(2)  ' Zugriff auf den zweiten Wert der ersten Sub-Collection
  5. Ändern eines Elements: Da du ein Element nicht direkt ändern kannst, lösche es und füge es erneut hinzu:

    SammelCollect(1).Remove 2  ' Entferne das zweite Item
    SammelCollect(1).Add "Neuer Wert", , , 2  ' Füge den neuen Wert an der gleichen Stelle hinzu

Häufige Fehler und Lösungen

  • Fehler: "Kann Item nicht ändern."

    • Lösung: Du kannst ein Item in einer VBA Collection nicht direkt ändern. Du musst es löschen und dann neu hinzufügen.
  • Fehler: "Index außerhalb des gültigen Bereichs."

    • Lösung: Stelle sicher, dass du den richtigen Index oder Key verwendest, um auf die Items in der Collection zuzugreifen.

Alternative Methoden

  1. Verwendung einer Auflistungsklasse: Statt einer Excel VBA Collection kannst du eine Auflistungsklasse erstellen, die es dir ermöglicht, Items direkt zu ändern.

  2. Verwendung der Dictionary-Klasse: Diese Klasse erlaubt das nachträgliche Ändern von Items und Keys. Beachte jedoch, dass sie möglicherweise durch Sicherheitsrichtlinien deines Unternehmens blockiert wird.


Praktische Beispiele

Hier ist ein Beispiel, wie du mit einer VBA Collection of Arrays arbeiten kannst:

Dim CollArray As Collection
Set CollArray = New Collection

Dim myArray(1 To 3) As Variant
myArray(1) = "Wert 1"
myArray(2) = "Wert 2"
myArray(3) = "Wert 3"

CollArray.Add myArray  ' Füge das Array zur Collection hinzu

' Zugriff auf das zweite Element des Arrays
Dim temp As Variant
temp = CollArray(1)(2)  ' Gibt "Wert 2" zurück

Tipps für Profis

  • Nutze die Excel VBA Collection Key-Funktion, um Items mit einem eindeutigen Schlüssel hinzuzufügen. So kannst du später einfacher auf die Items zugreifen.

  • Halte deine Collections gut organisiert, um die Übersichtlichkeit zu wahren, insbesondere wenn du mehrere VBA Collections verwendest.


FAQ: Häufige Fragen

1. Kann ich benutzerdefinierte Datentypen in einer Collection speichern? Nein, du kannst in einer Excel Collection nur einfache Variablen oder Objekte speichern. Benutzerdefinierte Datentypen sollten durch eine Auflistungsklasse ersetzt werden.

2. Wie greife ich auf ein bestimmtes Element in einer Sub-Collection zu? Du kannst entweder den Key oder den Index verwenden, um auf das gewünschte Element zuzugreifen.

3. Was passiert, wenn ich ein Item aus einer Collection lösche? Wenn du ein Item entfernst, wird es aus der Collection gelöscht, und die verbleibenden Items bleiben unverändert. Du kannst dann ein neues Item hinzufügen.

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