通过使用循环在excel vba中填充数组我遇到了问题。
其实我想通过以下方式填写字典myitem
:
produkt1
和produkt2
可能都是字典。
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
也许有人知道如何解决问题。 提前谢谢!
答案 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设置为空来避免了这个问题。 谢谢你的帮助!