Вы должны установить переменную 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