Frage : Scripting Wörterbuch

Hallo Experten,

I morgens das Gefühl, das über dieses, da ich kann das Makro nicht unten erhalten, um zu arbeiten - es total stumm ist, ist im angebrachten file.

All, das ich tun möchte soll eine einzigartige Liste der Einzelteile in einem Wörterbuch erstellen und sie zu einem Arbeitsblatt ausgeben. Es kann nicht viel einfacher sein. Ich kann es mit einer Ansammlung tun, ohne an es sogar zu denken, aber… benutzt

I sogar das Scripting Wörterbuch erfolgreich in einigen Fragen, aber dieses mal in meiner Probeakte, vereinbart I dunno, ein Dunst über me.

Patrick
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Sub dict_test ()
Schwaches rng als Strecke
Schwaches celle als Strecke
Schwaches dic_item
I als lang verdunkeln

Dic als Scripting.Dictionary verdunkeln
Dic = neues Scripting.Dictionary einstellen
dic.CompareMode = TextCompare

Mit Blättern („Sheet1“)
    Rng = Strecke einstellen (. Zellen (1, „A“). Zellen (. Rows.Count, „A“). Ende (xlUp))

    Für jedes celle im rng
        Wenn nicht dic.exists (celle) dann
            dic. Celle, celle addieren
        Beenden wenn
    Folgendes celle
    
    Für i = 1 zu dic. Zählimpuls
        . Zellen (i, „C“) = dic. Einzelteil (i)
    Zunächst I
Ende mit

Enden-Unterseeboot
Attachments:

Antwort : Scripting Wörterbuch

Patrick,

Einige Sachen, die in meinem Artikel-http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/A_3391-Using-the-Dictionary-Class-in-VBA.html adressiert

1) Anders als eine Ansammlung können Sie auf Einzelteile in einem Wörterbuch nicht using einen Index beziehen.  Eher in einem Wörterbuch, können Sie ein einzelnes Einzelteil nur holen, wenn Sie seinen Schlüssel liefern.  So Ihre Schleife:

    Für i = 1 zu dic. Zählimpuls
        . Zellen (i, „C“) = dic. Einzelteil (i)
    Zunächst I

auszieht nicht Einzelteile vom Wörterbuch t.  In der Tat wegen des impliziten Wörterbuches „Verhalten addieren“, diese Schleife hinzufügt wirklich neue Einzelteile dem Wörterbuch:)

2) Sie hinzufügten wirklich die Strecke als der Schlüssel und nicht den Wert der Zelle, in Ihrer ersten Schleife sten:

    Für jedes celle im rng
        Wenn nicht dic.exists (celle) dann
            dic. Celle, celle addieren
        Beenden wenn
    Folgendes celle

Da jede Zelle ein anderer Gegenstand ist, beendeten Sie wirklich herauf das Addieren alle jene Zellen als Einzelteil und Schlüssel

******************

So den Code regeln:

1) Die Werte der Zellen und nicht die Zellen selbst, zum Wörterbuch ausdrücklich führen.  Oder, eine Reihenübertragung verwenden, um eine Reihe im Gedächtnis zu verursachen, und dann durch die Reihe schlingen und Reihenwerte zum Wörterbuch führen

2) Die Einzelteile in eine Reihe entleeren

3) Eine Reihenübertragung tun, um die Werte zum Arbeitsblatt zu schreiben

Patrick
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
Vordict_test ()
    
    Schwaches rng als Strecke
    Schwaches celle als Strecke
    Schwache dic_items als Variante
    I als lang verdunkeln
    X als Variante verdunkeln
    
    Dic als Scripting.Dictionary verdunkeln
    Dic = neues Scripting.Dictionary einstellen
    dic.CompareMode = 1
    
    Mit Blättern („Sheet1“)
        Rng = Strecke einstellen (. Zellen (1, „A“). Zellen (. Rows.Count, „A“). Ende (xlUp))
    
        Für jedes celle im rng
            Wenn nicht dic.exists (celle. Wert) dann
                dic. Celle addieren. Wert, celle. Wert
            Beenden wenn
        Folgendes celle
        
        dic_items = dic. Einzelteile
        
        . [c: c] .ClearContents
        . [c1]. Die Größe neu bestimmen (dic. Zählen, 1) = Application.Transpose (dic_items)
    Mit beenden
    
    Dic einstellen = nichts
    
Unterseeboot beenden
Weitere Lösungen  
 
programming4us programming4us