Уже несколько недель гуглю и пробую, но не нашел решения.
У меня есть цикл, который просматривает список записей и пытается составить из них словарь.Мой цикл сначала проверяет, существует ли ключ в нашем главном словаре - если нет, он создает ключ и требуемые под-словари - затем проверяет, какое значение под-словаря необходимо обновить.Ниже приведено упрощение кода.
У меня есть следующие данные в таблице Excel:
A. B. C.
1 product1 item1 used
2 product2 item2 new
3 product1 item3 removed
4 product1 item3 removed
5 product3 item5 new
6 product4 item2 new
7 product2 item1 used
8 product1 item3 new
9 product4 item2 removed
10 product5 item1 used
Так что теперь цикл должен пройти через каждую строку и определить для каждого продукта, сколько использовалось,новые и удаленные из каждого элемента есть.
Sub example()
Set test_dict = New Scripting.Dictionary
For i = 1 To 10
product_name = Cells(i, 1).Value
item_name = Cells(i, 2).Value
item_status = Cells(i, 3).Value
If test_dict.Exists(product_name) = False Then
Set item_dict = New Scripting.Dictionary
item_dict.Add item_name, 0
Set status_dict = New Scripting.Dictionary
status_dict.Add "used", item_dict
status_dict.Add "new", item_dict
status_dict.Add "removed", item_dict
test_dict.Add product_name, status_dict
End If
test_dict(product_name)(item_status)(item_name) = test_dict(product_name)(item_status)(item_name) + 1
Next
End Sub
Это должно привести к примерно так:
test_dict
|
|--> "product1"
| |--> "used"
| | |-> "item1" = 1
| | '-> "item3" = 0
| |-> "new"
| | |-> "item1" = 0
| | '-> "item3" = 1
| '-> "removed"
| |-> "item1" = 0
| '-> "item3" = 2
|--> "product2" (etc.)
Но по какой-то причине мой цикл продолжает обновлять все поддикты, то есть
test_dict
|
|--> "product1"
| |--> "used"
| | |-> "item1" = 1 *<-- correct value for item1*
| | '-> "item3" = 2 *<-- false value for item3*
| |-> "new"
| | |-> "item1" = 1 *<-- false value for item1*
| | '-> "item3" = 2 *<-- false value for item3*
| '-> "removed"
| |-> "item1" = 1 *<-- false value for item1*
| '-> "item3" = 2 *<-- correct value for item3*
|--> "product2" (etc.)
Есть идеи, что я здесь не так делаю?Я проверял свой код снова и снова, я пробовал разные способы сделать то же самое, но каким-то образом я всегда сталкиваюсь с проблемой.