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

CreateObject("Scripting.dictionary")

Forumthread: CreateObject("Scripting.dictionary")

CreateObject("Scripting.dictionary")
12.03.2009 13:23:48
chris
Hallo VBA experten,
habe eine frage und würde mich riesig freuen wenn ihr mir helfen könnt.
Ich Will mit dem dictionary arbeiten.
Und zwar habe ich eine Datei in der stehen untereinander werte und ich möchte gerne erreichen das jeder Wert nur 1 mal im Array scr steht.
Das Makro läuft auch nur es werden angezeigt im Scr Count = 393 aber wenn ich unter Debuggen in Überwachungsausdrücke reinschaue sehe ich nur 256.
Kann das dictionary Object nicht mehr ?
Oder liegt es an der Variablen deklaration ?
Momentan habe ich nur Set scr = CreateObject("Scripting.dictionary")
Hier das Makro
Set scr = CreateObject("Scripting.dictionary")
'Schleife über alle einträge.Einlesen der Einträge nur einzelen Werte keine Doppelten werte in Array (Arr_Suchbegriffe) eintragen
With Vorlage.Worksheets("Stand")
For X = 2 To .Cells(.Cells.Rows.Count, 4).End(xlUp).Row
scr(.Cells(X, 4).Text) = scr(.Cells(X, 4).Text)
Next X
End With
Vielen dank für eure Hilfe
gruß Chris
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CreateObject("Scripting.dictionary")
12.03.2009 13:44:41
Renee
Hi Chris,
Der Code ist völlig verquer...sprich nicht brauchbar!
wenn schon müsste es irgendwie so heissen:

Set scr = CreateObject("Scripting.Dictionary")
With Vorlage.Worksheets("Stand")
For x = 2 To .Cells(.Cells.Rows.Count, 4).End(xlUp).Row
scr.Add .Cells(x, 4).Text, .Cells(x, 4).Text
Next x
End With


Im Array scr.Keys befinden sich anschliessend die eindeutigen Begriffe!
GreetZ Renée

Anzeige
AW: CreateObject("Scripting.dictionary")
12.03.2009 16:32:03
chris
Vielen Dank Rene und Dan,
aber eins noch... warum sehe ich im Visualbasic editor bei den Überwachungsausdrücken nur 256 werte im
scr ?
Also wenn ich rechte Maustaste auf scr gehe und dann Überwachung hinzufügen sehe ich bei Count 393 und wenn ich aber im Überwachungsfenster runter scrolle sehe ich nur 256.
Oder ist das normal ?
Vielen Dank aber erst mal für die bereimigung meines codes.
Schönen Tag noch !
Anzeige
Ja ist normal (owT)
12.03.2009 16:56:17
Renee

AW: CreateObject("Scripting.dictionary")
12.03.2009 13:45:24
chris
Habe es selbst hinbekommen.
So geht das dann stehen die Werte im Array
ich muss erst die elemente Holen.
Aber warum mir der count 393 anzeigt und die werte im scr nur 256 verstehe ich noch nicht ?
Deshalb noch offen.VieleN Dank
'so hole ich die Elemente ins Array
Arr_Suchbegriffe = scr.keys 'Die Elemente holen
gruß Chris
Anzeige
AW: CreateObject("Scripting.dictionary")
12.03.2009 13:51:02
dan
Option Explicit

Public Sub DicTest()
Dim scr As Dictionary
Dim X As Integer
' Set scr = CreateObject("Scripting.dictionary")
Set scr = New Dictionary
'Schleife über alle einträge.Einlesen der Einträge nur einzelen Werte keine Doppelten werte in  _
Array (Arr_Suchbegriffe) eintragen
With ThisWorkbook.Worksheets("Stand")
For X = 2 To .Cells(.Cells.Rows.Count, 4).End(xlUp).Row
scr.Add .Cells(X, 4).Text, .Cells(X, 4).Text
Next X
End With
MsgBox scr.Items(scr.Count - 1)
End Sub


Anzeige
;
Anzeige

Infobox / Tutorial

Scripting.Dictionary in VBA nutzen


Schritt-für-Schritt-Anleitung

Um mit dem Scripting.Dictionary in VBA zu arbeiten, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (DeinWorkbookName) und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Public Sub DicTest()
       Dim scr As Object
       Dim X As Integer
       Set scr = CreateObject("Scripting.Dictionary")
    
       With ThisWorkbook.Worksheets("Stand")
           For X = 2 To .Cells(.Cells.Rows.Count, 4).End(xlUp).Row
               scr.Add .Cells(X, 4).Text, .Cells(X, 4).Text
           Next X
       End With
    
       MsgBox scr.Items(scr.Count - 1)
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Mit diesem Makro kannst du die Werte aus der Spalte 4 des Arbeitsblatts "Stand" in ein Dictionary einfügen, wodurch du nur eindeutige Werte speicherst.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"
    Stelle sicher, dass das Arbeitsblatt "Stand" existiert und die Daten in Spalte 4 vorhanden sind.

  • Fehler: "Element bereits vorhanden"
    Dies passiert, wenn du versuchst, einen Wert hinzuzufügen, der bereits im Dictionary vorhanden ist. Du kannst die Exists-Methode verwenden, um dies zu überprüfen:

    If Not scr.Exists(.Cells(X, 4).Text) Then
       scr.Add .Cells(X, 4).Text, .Cells(X, 4).Text
    End If

Alternative Methoden

Es gibt verschiedene Möglichkeiten, mit einem Dictionary in VBA zu arbeiten. Du kannst das New-Schlüsselwort verwenden, um ein neues Scripting.Dictionary-Objekt zu erstellen:

Dim scr As New Scripting.Dictionary

Dies ist eine Alternative zu CreateObject("Scripting.Dictionary"), die oft einfacher zu lesen ist.


Praktische Beispiele

Hier sind einige Beispiele für den Einsatz des Scripting.Dictionary in Excel VBA:

  1. Eindeutige Werte aus einer Liste extrahieren:

    Dim uniqueValues As Object
    Set uniqueValues = CreateObject("Scripting.Dictionary")
  2. Zählung der Elemente im Dictionary:

    MsgBox "Anzahl der eindeutigen Werte: " & uniqueValues.Count

Tipps für Profis

  • Nutze die .Keys- und .Items-Methoden, um einfach auf die Schlüssel und Werte im Dictionary zuzugreifen.
  • Achte darauf, große Datenmengen zu verwalten, da die Größe des Dictionaries in VBA begrenzt ist. In der Regel gibt es keine feste Grenze, aber die Leistung kann bei sehr großen Datenmengen leiden.
  • Verwende das Scripting.Dictionary für schnelle Lookups und Gruppierungen, um die Leistung deiner VBA-Makros zu optimieren.

FAQ: Häufige Fragen

1. Warum kann ich nur 256 Werte im Überwachungsfenster sehen?
Das ist normal, da das Überwachungsfenster eine Beschränkung hat. Der Count-Wert im Dictionary zeigt an, wie viele Werte tatsächlich gespeichert sind.

2. Was ist der Unterschied zwischen CreateObject und New?
CreateObject("Scripting.Dictionary") erstellt eine neue Instanz eines Objekts zur Laufzeit, während Set scr = New Scripting.Dictionary zur Compile-Zeit erstellt wird. Beide Methoden sind gültig, aber New ist oft übersichtlicher.

3. Kann ich das Dictionary auch in einer Schleife leeren?
Ja, du kannst das Dictionary mit der Methode .RemoveAll leeren:

scr.RemoveAll

Damit kannst du das Dictionary zurücksetzen und erneut verwenden, ohne eine neue Instanz zu erstellen.

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