Так что я использую немного кода здесь, где я использовал один словарь для заполнения двух разных словарей, которые хранятся в качестве атрибутов в пользовательском классе. Я делаю это для повышения эффективности.VBA: Проблемы памяти словаря? Заполнять dict, .removeall, populate issues
Примечание: У меня есть обходное решение этой проблемы, используя словарь для каждого атрибута, который я хочу установить, но это не слишком эффективно.
Так примерно вот мой код:
for iKey = 1 to class.maxnumber ' 8
dTempDict.add iKey, cdbl(24) ' enforce to 24 for calcs later
next iKey
Set class.dict1 = dTempDict ' commit to class.dict1
dTempDict.removeall 'wipe temp dictionary
for iKey = 1 to class.maxnumber ' 8
dTempDict.add iKey, "word" ' something other than 24 to test
next iKey
Set class.dict2 = dTempDict
Так выше работает отлично. Затем я попытался выполнить цикл и распечатать ключи класса.dict1 без проблем. Когда я попытался присвоить значения предварительно объявленному dbl, я попал в беду. Затем я петельные через каждого ключа, как это в другом югу ближнего класса ByRef:
dim dTempDict as scripting.dictionary
Set dTempDict = class.dict1
for each iKey in dTempDict
msgbox typename(dTempDict.Item(iKey))
next iKey
Это вернуло результат ... «String» ... запутанным. Затем я изменил свой держатель стоимости на строку, и она сработала. Я проверил мои аксессоры внутри класса, и они не возвращаются к неправильному атрибуту словаря, поэтому кажется, что, хотя я назначаю их второй и даже делаю .removeall, значения для моего второго словаря заселяются в первый.
Любые идеи?
Как было сказано выше, с использованием другого словаря temp для class.dict1 и class.dict2 они назначаются правильно, но это все еще запутывает.