Я думаю, что понял, поправьте меня, если я ошибаюсь.
Когда я создаю словарную запись с
Set dict(i) = New Cfgadress
Создается новая словарная запись: пустой объект класса Cfgadress, связанный с ключом i
Dict (i) относится к элементу, содержащемуся в записи i словаря dict, т.е. к объекту класса, содержащемуся.
Чтобы изменить ключ, мне нужно назначить новый элемент / ключ пары, но элемент существует только как запись i словаря. Поэтому мне нужно:
- , чтобы использовать запись словаря как элемент, связанный с ключом в новом словаре / коллекции / массиве (что я сделал в своем коде)
- или чтобы назначить dict (i) для объекта, добавьте его к правильному ключу и удалите прежний.
Set object as New class
Set object=dict(i)
dict.Add "key", object
dict.remove "1"
Я получил его?
Ваше решение Это гораздо проще, и это то, что я попробовал в первую очередь, но я пошел в словарь Dynami c, потому что на каждой итерации, обновление экземпляра класса также обновляло предыдущие записи коллекции
Set Wb = ThisWorkbook '==================
Set WsCfg = Wb.Sheets("Cfg") '==================
Dim dict_cfg As New Dictionary
Dim coll As New Collection
Set tcfg_adress = New Cfgadress
For i = 3 To 4 '22
If WsCfg.Cells(i, 10) = 1 And WsCfg.Cells(i, 11) = 1 Then
tcfg_adress.Row1 = WsCfg.Cells(i, 4).Value
tcfg_adress.Col1 = WsCfg.Cells(i, 5).Value
tcfg_adress.Lrow = WsCfg.Cells(i, 6).Value
tcfg_adress.Lcol = WsCfg.Cells(i, 7).Value
tcfg_adress.Nbrow = WsCfg.Cells(i, 8).Value
tcfg_adress.Nbcol = WsCfg.Cells(i, 9).Value
coll.Add tcfg_adress, WsCfg.Cells(i, 1)
End If
Next i
Оказывается, этот параметр новый экземпляр класса в каждом l oop, как я видел в вашем коде, решил мою проблему. Я думал, что было нечего делать и расследовал в обход. Большое спасибо!