Questione : Dizionario Scripting

Ciao esperti, sensibilità del

I completamente muta circa questa poichè non posso convincere la macro qui sotto per funzionare - è nel file.

All che voglio fare devo generare una lista unica degli articoli in un dizionario e produrrlo ad un manuale. Non può essere molto più facile. Posso farlo con una collezione senza persino pensare a questo proposito ma… il

I persino ha utilizzato con successo il dizionario Scripting in parecchie domande ma questo volta nella mia lima di prova, il dunno di I, un'opacità si è depositato sopra me.

Patrick
class= > " libero " del
> " del codeSnippet " del class= del
class= " lineNumbers " del
class= del
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 notpretty " del class= " del id= " codeSnippet819215 del
           
class= " lastRow del
>Attachments " di nome " del class= del class= " valore " del
il

il nome di schedario " del class= di >Dict-test-01.xls " fileSize " > (30 Kb) il Javascript " del href= " " dei attachmentDetails del class= di (tipo di lima particolari)
class= " descrizione " >xls
del
il class= di
del >
class= del

Risposta : Dizionario Scripting

Patrick,

Alcune cose, che sono indirizzate nel mio http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/A_3391-Using-the-Dictionary-Class-in-VBA.html dell'articolo

1) Diverso di una collezione, non potete riferirti agli articoli in un dizionario using un indice.  Piuttosto, in un dizionario, potete andare a prendere soltanto un singolo articolo se fornite la relativa chiave.  Così, il vostro ciclo:

    Per i = 1 a dic. Conteggio
        . Cellule (i, “C„) = dic. Articolo (i)
    Dopo i

non estrarrà gli articoli dal dizionario.  Effettivamente, a causa del dizionario “implicito aggiungere„ il comportamento, quel ciclo realmente sta aggiungendo i nuovi articoli al dizionario:)

2) Realmente stavate aggiungendo la gamma come la chiave e non il valore della cellula, nel vostro primo ciclo:

    Per ogni celle nel rng
        Se non dic.exists (celle) allora
            dic. Aggiungere il celle, celle
        Concluder se
    Celle seguente

Poiché ogni cellula è un oggetto differente, realmente vi siete concluso sull'aggiunta delle tutte quelle cellule come sia l'articolo che chiave

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

Così, riparare il codice:

1) Passare esplicitamente i valori delle cellule e non le cellule essi stessi, al dizionario.  O, usare un trasferimento di allineamento per generare un allineamento nella memoria ed allora collegare con l'allineamento e passare i valori di allineamento al dizionario

2) Fare uscire gli articoli in un allineamento

3) Fare un trasferimento di allineamento per scrivere i valori al manuale

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:
Più dict_test secondari ()
    
    Rng fioco come gamma
    Celle fioco come gamma
    Dic_items fiochi come variante
    Oscurare la i come lungamente
    Oscurare la x come variante
    
    Oscurare dic come Scripting.Dictionary
    Regolare Scripting.Dictionary dic = nuovo
    dic.CompareMode = 1
    
    Con gli strati (“Sheet1„)
        Regolare il rng = la gamma (. Cellule (1, “A„). Cellule (. Rows.Count, “A„). Estremità (xlUp))
    
        Per ogni celle nel rng
            Se non dic.exists (celle. Valore) allora
                dic. Aggiungere il celle. Valore, celle. Valore
            Concluder se
        Celle seguente
        
        dic_items = dic. Articoli
        
        . [c: c] .ClearContents
        . [c1]. Ridimensionare (dic. Contare, 1) = Application.Transpose (dic_items)
    Concluder con
    
    Regolar dic = niente
    
Concludere il sommergibile
Altre soluzioni  
 
programming4us programming4us