Pergunta : Dicionário Scripting

Olá! peritos, sentimento do

I am totalmente mudo sobre este como eu não posso conseguir o macro abaixo trabalhar - está no file.

All que eu quero fazer devo criar uma lista original de artigos em um dicionário e output á uma folha. Não pode ser muito mais fácil. Eu posso fazê-lo com uma coleção sem mesmo pensar sobre ele mas… o

I usou mesmo o dicionário Scripting com sucesso em diversas perguntas mas esta vez em minha lima experimental, o dunno de I, um embaçamento estabeleceu-se sobre me.

Patrick
class= > " desobstruído " do
> do " codeSnippet " do class= do
class= " lineNumbers " do
class= do
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 " do class= " do id= " codeSnippet819215 do
           
class= do " lastRow do
>Attachments do " nome " do class= do class= " valor " do
>

nome de arquivo " do class= do >Dict-test-01.xls " fileSize " > (30 KB) Javascript " do href= o " dos " attachmentDetails do class= de (tipo de lima detalhes)
class= " descrição " >xls
do
o class= de
do >
class= do

Resposta : Dicionário Scripting

Patrick,

Algumas coisas, que são endereçadas em meu http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/A_3391-Using-the-Dictionary-Class-in-VBA.html do artigo

1) Ao contrário de uma coleção, você não pode referir artigos em um dicionário using um índice.  Um pouco, em um dicionário, você pode somente buscar um único artigo se você fornece sua chave.  Assim, seu laço:

    Para i = 1 a dic. Contagem
        . Pilhas (i, “C”) = dic. Artigo (i)
    Em seguida i

não retirará artigos do dicionário.  Certamente, por causa do dicionário “implícito adicionar” o comportamento, esse laço está adicionando realmente artigos novos ao dicionário:)

2) Você adicionava realmente a escala como a chave, e não o valor da pilha, em seu primeiro laço:

    Para cada celle no rng
        Se não dic.exists (celle) então
            dic. Adicionar o celle, celle
        Terminar se
    Celle seguinte

Desde que cada pilha é um objeto diferente, você terminou realmente acima de adicionar todas aquelas pilhas como o artigo e a chave

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

Assim, para reparar o código:

1) Passar explicitamente os valores das pilhas, e não as pilhas elas mesmas, ao dicionário.  Ou, usar transferência da disposição para criar uma disposição na memória, e então dá-la laços com a disposição e passar valores da disposição ao dicionário

2) Despejar os artigos em uma disposição

3) Fazer transferência da disposição para escrever os valores à folha

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:
As mais dict_test secundários ()
    
    Rng não ofuscante como a escala
    Celle não ofuscante como a escala
    Dic_items não ofuscantes como a variação
    Escurecer i como por muito tempo
    Escurecer x como a variação
    
    Escurecer dic como Scripting.Dictionary
    Ajustar Scripting.Dictionary dic = novo
    dic.CompareMode = 1
    
    Com folhas (“Sheet1”)
        Ajustar o rng = a escala (. Pilhas (1, “A”). Pilhas (. Rows.Count, “A”). Extremidade (xlUp))
    
        Para cada celle no rng
            Se não dic.exists (celle. Valor) então
                dic. Adicionar o celle. Valor, celle. Valor
            Terminar se
        Celle seguinte
        
        dic_items = dic. Artigos
        
        . [c: c] .ClearContents
        . [c1]. Resize (dic. Contar, 1) = Application.Transpose (os dic_items)
    Terminar com
    
    Ajustar dic = nada
    
Terminar o submarino
Outras soluções  
 
programming4us programming4us