Ваш код выглядит нормально, хотя 2 строки, в которых вы устанавливаете свой dict и ничего не воссоздаете, не нужны.
Не уверен, связано ли это, но в некоторых версиях VBA IDE есть ошибка: если вы добавили часы на dict(aKeyThatDoesNotExist)
, это может привести к добавлению ключа tgat в dict и его невозможности удаления. единственное решение, которое я знаю: перезапустите Excel, чтобы очистить память.
EDIT
Для Сиддхарта:
Протестировано с Excel 2003 и 2010.
Создать новую книгу.
Откройте VBA IDE.
Введите это в модуле Sheet1:
Option Explicit
Sub test()
Dim d As Variant
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "a"
Debug.Print d.Count
'Add watch here on d and d("b")
Debug.Print d.Count
End Sub
Запустите его в пошаговом режиме, а в комментариях добавьте часы на d
и d("b")
.
Вторая Debug.Print
напечатает 2. До сих пор вы могли подумать, что часы создали запись, что странно, потому что вы не ожидаете, что часы будут иметь побочные эффекты.
Запустите макрос еще раз: first Debug.Print
напечатает 2, и вы заметите, что в словаре уже есть клавиша "b".
На самом деле, вопреки тому, что я сказал выше, удаление часов на d("b")
и повторный запуск макроса приведет к правильному сбросу словаря.