Ваш код выглядит нормально, хотя на 2 линии, где вы установили свой Dict ни к чему, а воссоздать не нужно.
Не уверен, что это связано, но в некоторых версиях VBA IDE есть ошибка: если вы добавили часы на dict(aKeyThatDoesNotExist)
, это может привести к тому, что ключ tgat будет добавлен в dict и не будет съемным. единственное решение, которое я знаю: перезапустите Excel, чтобы очистить память.
EDIT
Для Сиддхарта: Испытано с Excel 2003 & 2010.
Создать новую книгу.
Открыть VBA IDE.
Тип этого в модуле Лист1:
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. До сих пор вы могли подумать, что часы создали запись, которая является странной, потому что вы не ожидаете, что часы будут иметь побочные эффекты.
Запустите макрос снова: сначалаDebug.Print
напечатает 2, и вы заметите, что словарь уже имеет клавишу «b».
Фактически, в отличие от того, что я сказал выше, удаление часов на d("b")
и повторное использование макроса корректно вернет словарь.
Хммм это интересно. Можете ли вы воспроизвести его или это случайная вещь? –
@SiddharthRout Смотрите мое редактирование. – assylias
Спасибо, заглянем в него сегодня :) И если я смогу воспроизвести его, тогда я напишу эту ошибку с MS сегодня :) –