Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Collection Key auslesen

Collection Key auslesen
Alfons
Hallo,
hab zwar gerade gelesen das es nicht geht (Schwimmer),
frage aber trotzdem nochmal:
kann man den Key einer Collection auslesen?
Gruß
Alfons
http://vba1.de
Anzeige
AW: Collection Key auslesen
30.07.2010 12:51:44
Rudi
Hallo,
wenn M.Schwimmer sagt, dass es nicht geht, warum fragst du dann?
Was wilst du mit dem Key?
Gruß
Rudi
AW: Collection Key auslesen
30.07.2010 13:28:49
Alfons
Hallo,
--- wenn M.Schwimmer sagt, dass es nicht geht, warum fragst du dann?
warum nicht?
--- Was wilst du mit dem Key?
das hat mit dem zu tun https://www.herber.de/forum/messages/1169611.html
Wenn ich den key lesen könnte, würde ich einen Arbeitsschritt beim demaskieren sparen.
Gruß
Alfons
http://vba1.de
Anzeige
Erklärung nötig.
30.07.2010 15:12:33
Ramses
Hallo
Was hat das bitte mit einem Collection Key zu tun ?
Gruss Rainer
AW: Erklärung nötig.
30.07.2010 15:52:20
Alfons
Hallo,
ursprünglich ging das so:
col.Add Cells(lngZeile, 2).Value, Cells(lngZeile, 2).Value
wegen der Anführungszeichen funktionierte aber
ein paar Schleifen weiter SUMPRODUCT nicht:
Evaluate("=SUMPRODUCT((" & rngFirmen.Address & "=""" & col(lngZeile) & """)*(" & rngAE.Address & "))")
Mit den maskierten Werten geht das jetzt.
Trotzdem die Frage, kann man den unmaskierten Wert in den Key schreiben
und den maskierten ins Item?
Gruß
Alfons
http://vba1.de
Anzeige
Untauglich...
30.07.2010 21:53:01
Ramses
Hallo
Vielleicht solltest du deine Erklärungen so abfassen, dass wir "dummen" Anwender es auch verstehen.
Ich habe keine Ahnung was du mit "maskierten" Werten meinst und was es mit dem blöden "Key" auf sich hat.
Gruss Rainer
Klick mal auf deinen Link
30.07.2010 23:22:48
Ramses
Hallo
Ich weiss den vorherigen Code mit der Collection... aber ich versteh nicht was er will.
Er redet/schreibt in einem Level bei dem ich armer EXCEL Anwender nicht mehr mitkomme.
Gruss Rainer
AW: Collection-Keys
31.07.2010 10:37:21
Gerd
Sorry Rainer, bin halt Link(s)-Händer :-)
@ Alfons, denke, dass das nur umgekehrt geht u. man das direkte Auslesen von Collection-Keys vergessen kann.
Weshalb schreibst Du den Replace nicht direkt in die Sumproduct-Formel ?
Gruß Gerd
Anzeige
AW: Collection-Keys
02.08.2010 11:52:10
Alfons
Hallo,
ich versuch es deutlicher zu erklären:
in die Collection kommen Firmennamen die später an verschiedenen Stellen zu
unterschiedlichen Zwecken gebraucht werden.
Ein Firmenname könnte sein: BMW "Müller"
(incl. Anführungszeichen)
Weil es bei diesem Firmennamen -wegen der Anführungszeichen- mit SUMPRODUCT
Probleme gibt, müssen die Anführungzeichen aber verdoppelt (maskiert) in die
Collection eingetragen werden: BMW ""Müller""
Erst damit kann ich später SUMPRODUCT verwenden.
Deshalb wäre es praktisch, wenn man beides in die Collection eintragen und auslesen könnte:
Den Originalfimennamen in den Key und den maskierten Firmennamen ins Item:
Item: BMW "Müller"
Key: BMW ""Müller""
Dann könnte der Key für SUMPRODUCT verwendet werden und der Originalname stünde im Item zur Verfügung.
Ich hoffe das war verständlicher erklärt.
@ Gerd, das nur mit der Collection zu machen wäre am einfachsten gewesen.
Aber die Idee von Tino Scripting.Dictionary hat auch was...
Vielen Dank an Alle
Alfons
http://vba1.de
Anzeige
verwende doch ein Array...
31.07.2010 11:16:22
Tino
Hallo,
verwende doch ein zweidimensionales Array, damit müsste es doch gehen.
Warum aber in beiden Teilen da gleiche stehen soll, verstehe ich auch nicht.
Gruß Tino
oder mit Dictionary Object...
31.07.2010 17:17:31
Tino
Hallo,
oder arbeite mit Scripting.Dictionary,
da kannst Du z.Bsp. mit Index und einem dazugehörigen wert arbeiten.
Gruß Tino
Anzeige
AW: oder mit Dictionary Object...
02.08.2010 11:54:18
Alfons
Hallo,
das könnte es sein. Danke
Gruß
Alfons
http://vba1.de
;
Anzeige
Anzeige

Infobox / Tutorial

Collection Key in Excel VBA auslesen


Schritt-für-Schritt-Anleitung

Um den Key einer Collection in Excel VBA auszulesen, solltest Du zunächst wissen, dass es in VBA keine eingebaute Methode gibt, um direkt auf die Keys einer Collection zuzugreifen. Stattdessen kannst Du eine alternative Struktur wie das Scripting.Dictionary verwenden, um die gewünschten Werte zu speichern und auszulesen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Scripting.Dictionary aktivieren: Stelle sicher, dass die Microsoft Scripting Runtime in Deinem VBA-Projekt aktiviert ist. Gehe zu Extras > Verweise und aktiviere Microsoft Scripting Runtime.

  2. Dictionary erstellen: Erstelle ein neues Dictionary-Objekt, indem Du den folgenden Code verwendest:

    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
  3. Werte hinzufügen: Füge Werte in das Dictionary ein. Hier kannst Du sowohl den Key als auch den Wert festlegen:

    dict.Add "BMW ""Müller""", "BMW Müller"
  4. Keys auslesen: Um alle Keys auszulesen, kannst Du eine Schleife verwenden:

    Dim key As Variant
    For Each key In dict.Keys
        Debug.Print key
    Next key
  5. Werte auslesen: Um auf die Werte zuzugreifen, verwende den Key:

    Debug.Print dict("BMW ""Müller""")  ' Gibt "BMW Müller" aus

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht registriert": Dieser Fehler tritt auf, wenn die Microsoft Scripting Runtime nicht aktiviert ist. Gehe zu Verweise und aktiviere sie.

  • Problem mit Anführungszeichen: Wenn Du Anführungszeichen in Deinen Keys verwendest, stelle sicher, dass Du sie korrekt maskierst, z.B. "" für ein einzelnes Anführungszeichen.

  • Leere Keys oder Werte: Überprüfe, ob Du beim Hinzufügen von Werten zu Deinem Dictionary keine leeren Keys oder Werte verwendest. Dies kann zu Laufzeitfehlern führen.


Alternative Methoden

Falls Du mit einer Excel VBA Collection arbeiten möchtest, kannst Du die Keys nicht direkt auslesen. Eine Alternative ist die Verwendung eines zweidimensionalen Arrays oder die Kombination von Arrays und Collections. Hier ist ein Beispiel für die Verwendung eines Arrays:

Dim arr(1 To 2, 1 To 2) As String
arr(1, 1) = "BMW ""Müller"""
arr(1, 2) = "BMW Müller"

Mit dieser Methode hast Du die Flexibilität, sowohl den Key als auch den Wert in einem Array zu speichern.


Praktische Beispiele

Angenommen, Du möchtest die Firmennamen und deren maskierte Version in einer Collection oder einem Dictionary speichern. Hier ist ein Beispiel, wie Du das mit einem Dictionary machen kannst:

Sub Beispiel()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    dict.Add "BMW ""Müller""", "BMW Müller"
    dict.Add "Audi ""Schmidt""", "Audi Schmidt"

    Dim key As Variant
    For Each key In dict.Keys
        Debug.Print "Key: " & key & ", Value: " & dict(key)
    Next key
End Sub

Tipps für Profis

  • Verwende das Scripting.Dictionary: Es bietet eine flexible Möglichkeit, sowohl Keys als auch Werte zu speichern und ist oft einfacher zu handhaben als eine Collection.

  • Einfache Fehlerbehebung: Nutze Debug.Print, um schnell zu überprüfen, ob Deine Keys und Werte korrekt gespeichert sind.

  • Datenstruktur optimieren: Überlege, ob Du anstelle einer Collection oder eines Dictionaries vielleicht sogar ein Array verwenden möchtest, je nach Anforderung Deines Projekts.


FAQ: Häufige Fragen

1. Kann ich die Keys einer Excel VBA Collection direkt auslesen?
Nein, in Excel VBA ist es nicht möglich, die Keys einer Collection direkt auszulesen. Verwende stattdessen ein Scripting.Dictionary.

2. Was ist der Vorteil eines Scripting.Dictionary gegenüber einer Collection?
Ein Scripting.Dictionary erlaubt dir, sowohl Keys als auch Werte einfach zu speichern und auszulesen, während eine Collection diese Funktionalität nicht bietet.

3. Wie maskiere ich Anführungszeichen in einem Key?
Um Anführungszeichen in einem Key zu verwenden, maskiere sie mit "", z.B. BMW ""Müller"".

4. Ist die Verwendung von Arrays in Excel VBA sinnvoll?
Ja, Arrays können eine einfache und effiziente Methode sein, um Daten zu speichern, besonders wenn die Struktur der Daten klar definiert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige