Vraag : Het Woordenboek van Scripting

Hallo creëren Deskundigen,

I am totaal stom over dit aangezien ik niet de macro kan hieronder ertoe brengen om te werken de voelen - het is in file.

All die ik heb willen om doen ben een unieke lijst van punten in een woordenboek en een output het aan een aantekenvel. Het kan niet veel gemakkelijker zijn. Ik kan het met een inzameling doen zonder zelfs het denken over het maar… heeft

I zelfs het Woordenboek Scripting met succes in verscheidene vragen gebruikt maar dit keer in mijn proefdossier, dunno van I, heeft een nevel over me.

Patrick
geregeld
" codeBody "
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:
het meest dict_test
Sub ()
Schemerige rng als Waaier
Schemerige celle als Waaier
Schemerige dic_item
Schemerige I zoals lang

Schemerige dic als Scripting.Dictionary
Reeks dic = Nieuwe Scripting.Dictionary
dic.CompareMode = TextCompare

Met Bladen („Sheet1“)
    Reeks rng = Waaier (. Cellen (1, „A“). Cellen (. Rows.Count, „A“). Eind (xlUp))

    Voor Elke celle in rng
        Als niet dic.exists (celle) Dan
            dic. Voeg celle, celle toe
        Beëindig als
    Volgende celle
    
    Voor I = 1 aan dic. Telling
        . Cellen (I, „C“) = dic. Punt (I)
    Volgende I
Eind met

Sub van het eind
Attachments:

Antwoord : Het Woordenboek van Scripting

Patrick,

Een paar dingen, die in mijn artikelhttp://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/A_3391-Using-the-Dictionary-Class-in-VBA.html worden gericht

1) In tegenstelling tot een Inzameling, kunt u niet naar punten in een woordenboek verwijzen gebruikend een index.  Eerder, in een woordenboek, kunt u één enkel punt slechts halen als u zijn sleutel levert.  Zo, uw lijn:

    Voor I = 1 aan dic. Telling
        . Cellen (I, „C“) = dic. Punt (I)
    Volgende I

geen punten van het woordenboek zal terugtrekken.  Wegens het impliciete woordenboek „voeg namelijk“ gedrag toe, voegt die lijn eigenlijk nieuwe punten aan het woordenboek toe:)

2) U eigenlijk voegde de waaier als sleutel, en niet de waarde van de cel, in uw eerste lijn toe:

    Voor Elke celle in rng
        Als niet dic.exists (celle) Dan
            dic. Voeg celle, celle toe
        Beëindig als
    Volgende celle

Aangezien elke cel een verschillend voorwerp is, beëindigde u eigenlijk omhoog toevoegend elk van die cellen als zowel punt als sleutel

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

Zo, om de code te bevestigen:

1) Ga uitdrukkelijk de waarden van de cellen, en niet de cellen zelf, tot het woordenboek over.  Of, gebruik een serieoverdracht om een serie in geheugen tot stand te brengen, en toen lijn door de serie en seriewaarden over te gaan tot het woordenboek

2) Dump de punten in een serie

3) Doe een serieoverdracht de waarden aan het aantekenvel schrijven

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:
Sub het meest dict_test ()
    
    Schemerige rng als Waaier
    Schemerige celle als Waaier
    Schemerige dic_items als Variant
    Schemerige I zoals lang
    Schemerig x als Variant
    
    Schemerige dic als Scripting.Dictionary
    Reeks dic = Nieuwe Scripting.Dictionary
    dic.CompareMode = 1
    
    Met Bladen („Sheet1“)
        Reeks rng = Waaier (. Cellen (1, „A“). Cellen (. Rows.Count, „A“). Eind (xlUp))
    
        Voor Elke celle in rng
            Als niet dic.exists (celle. Waarde) toen
                dic. Voeg celle toe. Waarde, celle. Waarde
            Eind als
        Volgende celle
        
        dic_items = dic. Punten
        
        . [c: c] .ClearContents
        . [c1]. Resize (dic. Telling, 1) = Application.Transpose (dic_items)
    Eind met
    
    Reeks dic = niets
    
Sub van het eind
Andere oplossingen  
 
programming4us programming4us