Я не смог найти никакой документации по этому поводу, но я провел некоторый тест, и я предположил бы, что вам здесь не повезло.
Массив не является объектом в VBA, поэтому, если вы поместите массивв качестве значения в словарную запись VBA скопирует все свои значения. См. Например:
a(1) = "A-1"
dict.Add "MyA", a
a(2) = "A-2"
Debug.Print dict("MyA")(1), dict("MyA")(2) ' Will print "A-1" (but not "A-2")
Теперь, если вы измените свой код на
a(1) = "A-1"
dict.Add "MyA", a
dict("MyA")(2) = "A-2"
Debug.Print dict("MyA")(1), dict("MyA")(2) ' Will still print "A-1" (but not "A-2")
Почему?
Это всего лишь предположение: при доступе к dict("MyA")
VBA копирует значение . Поскольку это значение является массивом, он скопирует массив (в память). Затем вы изменяете 2-й элемент copy , но это не изменит массив, хранящийся в словаре.
В качестве обходного пути можно использовать Collection
вместо массива.