使用循环在数组中插入多个字典

时间:2018-03-15 11:51:31

标签: arrays excel vba dictionary for-loop

通过使用循环在excel vba中填充数组我遇到了问题。 其实我想通过以下方式填写字典myitemprodukt1produkt2可能都是字典。

myitem("productionOrderItems")=Array(produkt1, produkt2).

因为我现在没有多少次produkt我使用循环来创建字典produkt。 每次创建和填充字典produkt时,我都想将其分配给Array,就像我上面描述的那样。 以下代码显示了创建字典的循环。但在这种情况下,显然只创建了最后一个字典(i=counter)。 counter是我要分配给Array的产品数量。

myitem As New Dictionary

For i = 1 To counter
    Dim produkt As New Dictionary
    zeile = 2 + i
    produkt("id") = Tabelle6.Cells(zeile, 1).Value
    Tabelle6.Cells(zeile, 1).Value = ""
    produkt("actualWithdrawalQuantity") = Tabelle6.Cells(zeile, 2).Value
    Tabelle6.Cells(zeile, 2).Value = ""
    produkt("articleId") = Tabelle6.Cells(zeile, 3).Value
    Tabelle6.Cells(zeile, 3).Value = ""
    produkt("articleNumber") = Tabelle6.Cells(zeile, 4).Value
    Tabelle6.Cells(zeile, 4).Value = ""
    produkt("createdDate") = Tabelle6.Cells(zeile, 5).Value
    Tabelle6.Cells(zeile, 5).Value = ""
    produkt("positionNumber") = Tabelle6.Cells(zeile, 6).Value
    Tabelle6.Cells(zeile, 6).Value = ""
    produkt("quantity") = Tabelle6.Cells(zeile, 7).Value
    Tabelle6.Cells(zeile, 7).Value = ""
    produkt("targetWithdrawalDate") = Tabelle6.Cells(zeile, 8).Value
    Tabelle6.Cells(zeile, 8).Value = ""
    produkt("targetWithdrawalQuantity") = Tabelle6.Cells(zeile, 9).Value
    Tabelle6.Cells(zeile, 9).Value = ""
    myitem("productionOrderItems") = Array(produkt)
Next

也许有人知道如何解决问题。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

问题在于

myitem("productionOrderItems") = Array(produkt)

始终使用新数组覆盖myitem("productionOrderItems")并且不保留旧数组。所以最后只有最后一个" new"数组。

您需要做的是每次将现有数组扩展一个条目:

Dim tmpArr As Variant
tmpArr = myitem("productionOrderItems") 'read existing array into temp array
If IsEmpty(tmpArr) Then
    tmpArr = Array(produkt) 'first time we need to generate a array
Else 'for all other times we need to append to the existing array
    ReDim Preserve tmpArr(UBound(tmpArr) + 1) 'resize existing array by one
    Set tmpArr(UBound(tmpArr)) = produkt 'add the product to the newly added array entry
End If
myitem("productionOrderItems") = tmpArr 'write temp array back to dictionary

答案 1 :(得分:0)

我弄清楚问题是什么: 循环工作但“produkt”字典没有被覆盖,所以两次插入相同的“produkt”。 我通过在循环开始时将produkt设置为空来避免了这个问题。 谢谢你的帮助!