Excel vba класс в словаре - PullRequest
0 голосов
/ 08 мая 2018

Я добавляю элементы класса в словарь, но не могу их вернуть. Нужно ли зацикливаться или что я делаю не так?

Мой модуль класса "cOgg" имеет:

Public desc As String
Public alt As Single

и мой саб имеет:

sub pivo()
Dim oMat As New cOgg
Dim sosdb As New Dictionary
Set sosdb = Nothing

oMat.desc= "unodesc"
oMat.alt= 5
sosdb.Add "uno", oMat

oMat.desc= "duedesc"
oMat.alt= 10
sosdb.Add "due", oMat
Debug.Print (sosdb("uno").alt)
Debug.Print (sosdb("due").alt)
end sub

Если я запускаю сабвуфер, я получаю:

10
10

вместо

5
10

Есть идеи?

Привет

1 Ответ

0 голосов
/ 08 мая 2018

Вы должны установить переменную oMat для нового экземпляра класса cOgg после добавления, чтобы в вашем словаре было два экземпляра объекта класса.

sub pivo()
    Dim oMat As New cOgg
    Dim sosdb As New Dictionary
    Set sosdb = Nothing

    oMat.desc= "unodesc"
    oMat.alt= 5
    sosdb.Add "uno", oMat

    Set oMat = New cOgg
    oMat.desc= "duedesc"
    oMat.alt= 10
    sosdb.Add "due", oMat
    Debug.Print (sosdb("uno").alt)
    Debug.Print (sosdb("due").alt)
end sub

Если вы этого не сделаете, то oMat в записи "Uno" будет обновлено после того, как будет добавлено 10. Затем вы добавляете тот же точный экземпляр cOgg, который содержится в oMat, к "due" запись словаря. Таким образом, "uno" и "due" содержат один и тот же экземпляр объекта, которые идентичны и имеют alt из 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...