Проблема с присвоением значения вложенному словарю в VBA - PullRequest
0 голосов
/ 30 октября 2019

У меня проблема с присвоением значения вложенному словарю в VBA. Структура: dict (strValue) (dateValue) (arrayIndex).

, где dict - словарь, strValue - ключ словаря, dateValue - ключ вложенного словаря, а значение вложенного словаря - массив.

Структура данных должным образом объявлена, и внутренние члены успешно назначены. У меня есть только проблема с назначением самого внутреннего значения (членов массива).

То, что я пробовал, это:

dict(outD & " - " & inD)(dt)(h) = "str"

После назначения ожидаемое значение в словаре является пустой строкой ине должно быть.

1 Ответ

1 голос
/ 30 октября 2019

Я не смог найти никакой документации по этому поводу, но я провел некоторый тест, и я предположил бы, что вам здесь не повезло.

Массив не является объектом в 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 вместо массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...