Views

...

Important:

Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance.

E-mails

Deixe seu e-mail para receber atualizações...

eBook Promo

Dicionário de Dados em VBA - documentação de sintaxe completa

Dicionário de Dados em VBA - documentação de sintaxe completa



Dicionário de Dados são coleções aprimoradas. Gosto de usá-los em qualquer lugar onde tenha uma coleção, exceto quando uso uma coleção de Classes. Infelizmente, eu não encontrei uma única fonte que documenta o objeto inteiro. Então, para minha própria documentação,  decidi utilizar isso. Ao final do artigo veja a lista de fontes usadas neste artigo.

Vantagens dos objetos do dicionário sobre as coleções

  • A propriedade CompareMode especifica a sensibilidade a maiúsculas e minúsculas para Chaves.
  • Um método para determinar se um objeto existe no Dicionário.
  • Um método para extrair todas as chaves numa matriz.
  • Um método para extrair todos os itens numa matriz.
  • Um método para alterar um valor Chave.
  • Um método para remover todos os itens do Dicionário.
  • As chaves do dicionário não estão limitadas ao tipo de dados String.

Observação: uma diferença importante entre o objeto de coleção e o objeto de dicionário é o comportamento da propriedade de item. Se usar a propriedade Item para fazer referência a uma chave inexistente em uma coleção, receberá um erro. Se usar a propriedade Item para fazer referência a uma chave inexistente em um dicionário, essa chave será adicionada ao dicionário. Use o método Exists para determinar se uma chave está ou não presente em um dicionário.

Sintaxe

Crie um objeto de dicionário em qualquer versão do XL
Isso usa um exemplo de ligação tardia que eu prefiro para simplificar a implantação para outros PCs.
Dim dicMyDictionary as Object
Set dicMyDictionary = CreateObject("Scripting.Dictionary")
Definir a sensibilidade das teclas
dicMyDictionary.CompareMode = vbBinaryCompare 'Case Sensitive
dicMyDictionary.CompareMode = vbTextCompare 'Case Insensitive
Adicionar Item
dicMyDictionary.Add ItemKey, myItem
Adicionar ou alterar item
Isso às vezes é chamado de "Silent Add" método. Se uma chave não existir, ela será adicionada.
dicMyDictionary(ItemKey) = myItem
-or-
Set dicMyDictionary(ItemKey) = myObject
Determinar se existe um item
Se você não quiser o recurso "Silent Add", use isso antes de tentar alterar itens.
If dicMyDictionary.Exists(ItemKey) Then ...
Obter Número de Itens
Debug.Print = dicMyDictionary.Count
Obter um item por chave
MyItem = dicMyDictionary(ItemKey)
- or -
Set MyObject = dicMyDictionary(ItemKey)
Obter um item por número
Nota! Os itens do dicionário começam por 0
MyItem = dicMyDictionary.Items()(ItemNumber)
- or -
Set MyObject = dicMyDictionary.Items()(ItemNumber)
Obter uma chave por número
MyKey = dicMyDictionary.Keys()(ItemNumber)
Carregar todos os itens em uma matriz
Dim vArray as Variant
vArray = dicMyDictionary.Items()
Carregar todas as chaves em uma matriz
Dim vArray as Variant
vArray = dicMyDictionary.Keys()
Remover um item
dicMyDictionary.Remove(ItemKey)
Remover todos os itens
dicMyDictionary.RemoveAll


Usos

Eliminar duplicatas
Os dicionários são perfeitos para criar listas exclusivas usando sua função "adicionar silenciosamente".

Função GetDistinct ( ByVal oTarget como Range ) como Variant
     Dim vArray como Variant
     Dim dicMyDictionary como objeto
     Dim v como variante
     Definir dicMyDictionary = CreateObject ("Scripting.Dictionary")
     VArray = oTarget
     Para Cada v em vArray
     DicMyDictionary (v) = v
     Próximo
     GetDistinct = dicMyDictionary.Items ()
Função final



Pesquisa de tabela de código
Se pretendemos fazer referência a uma tabela repetidamente e "aleatoriamente" (em oposição a "sequencialmente"), colocar a tabela em um dicionário é fácil e rápido, bem como fácil e rápido de usar.
Função Pública Tbl2Dic ( ByVal oTarget As Range ) As Object
Dim dicMyDictionary As Object
Dim lRow As Long
Dim lCols As Long
Definir dicMyDictionary = CreateObject ("Scripting.Dictionary")
LCols = oTarget.Columns.Count - 1
Para lRow = 1 Para oTarget.Rows.Count
Com oTarget.Cells (lRow, 1)
Definir dicMyDictionary (.Value) = .Offset (0, 1) .Resize (1, lCols)
Terminar com
Próximo
Definir Tbl2Dic = dicMyDictionary

Função final 
Exemplos:
' Obter a coluna 2 da tabela de 2 colunas denominada "Estados" onde coluna 1 = "VA"
Dim dicStates como objeto
Definir dicStates = Tbl2Dic ([Estados])
     Debug.print dicStates ("VA")
' Obter a coluna 3 a partir da tabela de 3 colunas denominada "Estados" onde a coluna 1 = "VA"   
Dim dicStates como objeto
     Definir dicStates = Tbl2Dic ([Estados])
     Debug.print dicStates ("VA") (1,2)



Classe Container
Eu uso dicionários para armazenar objetos de classe na memória porque os dicionários podem conter qualquer coisa.



Public dicWorksheets as Object
Sub InitMyClass ()
Dim MyWorksheet      A s clsWorksheet
Dim oWks como planilha
Se dicWorksheets não é nada então _
   Definir dicWorksheets = CreateObject ("Scripting.Dictionary")
Para cada oWks neste ThisWorkbook.Worksheets
Set MyWorksheet = Novo clsWorksheet
     Definir MyWorksheet.Worksheet = oWks
     Definir dicWorksheets (oWks.Name) = MyWorksheet
Próximo
Função final

Envie seus comentários e sugestões e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

eBooks VBA na AMAZOM.com.br

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine