VBA – Objetos de Dicionário

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on August 18, 2023

Este artigo explicará e demonstrará o uso do objeto Dicionário do VBA.

O VBA permite que o usuário crie módulos de classe nos quais pode criar objetos de coleção. Um dicionário do VBA pode ser comparado a um objeto de coleção ou matriz, pois armazena informações na memória enquanto o código do VBA está em execução e permite que o usuário recupere e use essas informações posteriormente no código. O objeto de dicionário no VBA é mais flexível do que uma coleção, pois seu tamanho pode ser alterado automaticamente. Ele também é um tipo de dados variante, portanto, qualquer dado pode ser adicionado, como datas, números, texto etc.

Uso do Dicionário VBA

O dicionário VBA pode ser usado em outros programas do Microsoft Office, como o Word ou o PowerPoint. Portanto, ele precisa ser acessado por meio de vinculação antecipada ou tardia.

Se quiser usar a vinculação antecipada, será necessário adicionar uma referência em seu projeto à Microsoft Scripting Runtime Library.

No menu do VBE, selecione Ferramentas > Referências.

referencia scripting runtime

Role para baixo até Microsoft Scripting Runtime e certifique-se de que a caixa ao lado dela esteja marcada. Clique em OK. Uma referência será adicionada ao seu projeto VBA, e você poderá definir um novo objeto de dicionário fazendo referência direta a ele.

Sub ExemploVinculacaoAntecipada()
 Dim MeuDicionario As New Scripting.Dictionary
End Sub

Se estiver usando Vinculação Tardia, poderá usar Create Object para criar um objeto de dicionário. Se fizer isso, não precisará adicionar uma referência ao Microsoft Scripting Runtime ao seu projeto.

Sub ExemploVinculacaoTardia()
 Dim MeuDicionario As Object
 Set MeuDicionario = CreateObject("Scripting.Dictionary")
End Sub

Adição de Itens ao Dicionário

Depois de criar um objeto de dicionário, você pode adicionar itens ao dicionário.

Sub PreencherDicionario()
 Dim MeuDicionario As New Scripting.Dictionary
 MeuDicionario.Add 10, "MeuItem1"
 MeuDicionario.Add 20, "MeuItem2"
 MeuDicionario.Add 30, "MeuItem3"
End Sub

Esse código cria um novo objeto de dicionário chamado ‘MeuDicionario’ e o preenche com três itens. O método Add tem dois parâmetros – Chave e Item – e ambos são obrigatórios.

A chave deve ser exclusiva, pois esse é o valor de pesquisa no dicionário. Se a chave não for exclusiva, ao tentar executar o código, você receberá um erro.

erro chave existente

Os tipos de dados para Chave e Item são Variant, portanto, aceitam qualquer tipo de dados – numérico, texto, data etc

O primeiro item do dicionário poderia ser adicionado da seguinte forma:

MeuDicionario.Add "MeuItem1", 10

Os valores foram invertidos entre Chave e Item, mas isso ainda funcionaria, embora a chave de pesquisa agora se tornasse “MeuItem1”.

Leitura dos Valores do Dicionário

Depois de preencher o dicionário, você pode ler as chaves e os itens do dicionário individualmente ou usando um loop para percorrer todos os itens e chaves.

Para ler valores individuais, basta ler o item ou a chave pelo número de índice no dicionário. O número de índice em um dicionário sempre começa em 0

Sub NumerosDeIndice()
 Dim MeuDicionario As New Scripting.Dictionary
 MeuDicionario.Add 10, "Item1"
 MeuDicionario.Add 20, "Item2"
 MeuDicionario.Add 30, "Item3"
 MsgBox MeuDicionario.Keys(0)
End Sub

Retornará 10

e

Sub NumerosDeIndice()
 Dim MeuDicionario As New Scripting.Dictionary
 MeuDicionario.Add 10, "Item1"
 MeuDicionario.Add 20, "Item2"
 MeuDicionario.Add 30, "Item3"
 MsgBox MeuDicionario.Items(1)
End Sub

Retornará “Item2”.

Também podemos percorrer o dicionário para retornar cada chave e item.

Sub LerDicionario()
 Dim MeuDicionario As New Scripting.Dictionary, I As Variant
 MeuDicionario.Add 10, "MeuItem1"
 MeuDicionario.Add 20, "MeuItem2"
 MeuDicionario.Add 30, "MeuItem3"
 For Each I In MeuDicionario.Keys
    MsgBox I & " " & MeuDicionario(I)
 Next I
End Sub

Alteração do Valor do Item de uma Chave

É muito simples alterar o valor do item em um dicionário.

MeuDicionario("20") = "MeuNovoItem2"

Você também pode adicionar itens a um dicionário usando esse método. Se a chave não existir, ela será criada automaticamente.

Portanto, o código:

MeuDicionario("40") = "MeuItem4"

Adicionará um quarto item ao dicionário.

Exclusão de Itens do Dicionário

Da mesma forma, é muito fácil excluir itens do dicionário.

MeuDicionario.Remove("20")

Removerá o Item2

Também é possível remover todos os itens de um dicionário.

MeuDicionario.RemoveAll

Escopo do Dicionário

Como você declarou esse dicionário dentro do subprocedimento PreencherDicionario, ele só estará disponível dentro desse subprocedimento. Se quiser que um dicionário esteja disponível para todo o módulo, será necessário declará-lo no nível do módulo e não no nível do procedimento. Você pode fazer isso na parte superior do módulo, abaixo de Option Explicit.

dicionario nivel modulo

Além disso, se quiser que ele esteja disponível para todo o projeto, será necessário declará-lo em um nível global. Ele ainda pode ser declarado na parte superior do módulo, mas você precisa usar a instrução PUBLIC em vez da instrução DIM para declarar uma variável global.

dictionary project level

declarar como public

Uso do Dicionário em uma Pasta de Trabalho

Depois de preencher o dicionário, você pode preencher uma pasta de trabalho com os itens e/ou chaves do dicionário.

O código abaixo percorrerá todos os itens do dicionário e preencherá a coluna A com o valor da chave e a coluna B com o valor do item.

Sub CopiarParaPlanilha()
 Dim MeuDicionario As New Scripting.Dictionary
 Dim n As Integer
 MeuDicionario.Add 10, "Item1"
 MeuDicionario.Add 20, "Item2"
 MeuDicionario.Add 30, "Item3"
 Range("A1").Select
 For n = 0 To MeuDicionario.Count - 1
     ActiveCell.Value = MeuDicionario.Keys(n)
     ActiveCell.Offset(0, 1).Value = MeuDicionario.Items(n)
     ActiveCell.Offset(1, 0).Select
 Next n
End Sub
vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA