VBA – Objetos de Dicionário
In this Article
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.
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.
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.
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.
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