Como imprimir aulas de um dicionário

Aug 26 2020

Eu estava trabalhando na implementação de um dicionário que contém vários valores por chave, então adaptei o código encontrado neste tutorial / exemplo: https://excelmacromastery.com/vba-dictionary/#Example_2_8211_Dealing_with_Multiple_Values

Criei uma classe chamada clsAI_Appcom o seguinte código:

Public ApplicationID As String
Public AIName As String
Public DoseApplied As Double

E no meu módulo usei o seguinte bit:

For k = LBound(contents, 2) To UBound(contents, 2)
        Set oApplication = New clsAI_App
        oApplication.ApplicationID = Row & "-" & k
        oApplication.AIName = contents(1, k)
        oApplication.DoseApplied = contents(2, k) * wks_In.Cells(Row, 5)
        dict.Add oApplication.ApplicationID, oApplication
next k

Onde Rowe ksão valores inteiros e contents()é uma matriz de (1,3) (1,5)

Agora, se eu usar o método para imprimir um dicionário conforme as respostas para Como faço para depurar chaves e valores de impressão no dicionário usando o VBA? qual é:

Dim key As Variant
For Each key In dict.Keys
    Debug.Print key, dict(key) 
Next key

Acabo com o erro 438:

O objeto não suporta esta propriedade ou método

Que tem uma descrição excessivamente ampla. Portanto, não estou entendendo o que estou fazendo de errado aqui.

Respostas

1 FaneDuru Aug 26 2020 at 16:57

Não vi o link que você postou, mas como você carregou um objeto ( oApplication) e Debug.Printretorna strings, você deve adaptar o código para retornar uma propriedade de classe de string. Eu tentaria:

Debug.Print key, dict(key).DoseApplied...

Se a classe em discussão tiver muitas dessas propriedades, você pode extrair todas elas.

O dicionário é uma ferramenta poderosa, sendo capaz de manter todo tipo de variáveis, objetos e até funções ...