在VBA中从一个子节点调用字典到另一个子节点



当我在VBA中使用字典时,我遇到了一个问题。我想使用字典和do-while循环的原因是因为我有不同长度的变量,我想循环遍历它们。首先,我想给dic钥匙和物品。我在每个循环中跳过一个字段的原因是,每个系列都有一个带日期的字段和一个带价格的字段。如果可能的话,我想捕获与同一字典中价格相匹配的日期。

Sub opg1(dicSPX As Object)
Dim i As Integer, m As Integer
Dim varColLeng As Variant
Set dicSPX = CreateObject("Scripting.Dictionary")
m = 10
Sheets("Data").Activate

ReDim intCol(1 To nCol)
'opretter dictionary
ReDim n(1 To m)
Do While n <> ""
For i = 1 To mn
'            redim preserve IntColLen
dicSPX.Add Cells(1, 2 + ((i - 1) * 2)).Value, Range(Cells(9, 2 + ((i - 1) * 2)), Cells(n, 2 + ((i - 1) * 2))).Value
Next i
Loop
End Sub

,那么我想对dic中的所有键执行一个过程。我想计算不同时间序列的收益。然而,当我调用dic时,子Returns()得到一个错误(编译错误:变量未定义)。我不熟悉字典,我可能遗漏了一个小细节。

Sub Returns()
Call opg1(dicSPX)

Dim dicSPX As New Scripting.Dictionary
Dim varKey As Variant, varArr As Variant

For Each varKey In dicSPX
varArr = dicSPX(varKey)
For i = LBound(varArr, 1) To UBound(varArr, 1)
For j = LBound(varArr, 2) To UBound(varArr, 2)
'                varReturns(i,j) = compute  the return here
Next
Next
Next

有什么建议吗?我希望问题是清楚的。

谢谢

应该清楚哪个变量不是由抛出错误后突出显示的行定义的。我一眼就看出您没有定义ij:

Sub Returns()
Dim dicSPX As New Scripting.Dictionary
opg1(dicSPX)

Dim varKey As Variant
For Each varKey In dicSPX
Dim varArr As Variant
varArr = dicSPX(varKey)
Dim i As Long
For i = LBound(varArr, 1) To UBound(varArr, 1)
Dim j As Long
For j = LBound(varArr, 2) To UBound(varArr, 2)
varReturns(i,j) = compute  the return here
Next
Next
Next
End Sub

在使用每个变量之前,应该每次一行地显式定义它们。这样,声明总是在用法的附近,这样你就可以在同一个页面上看到它。

您还应该使opg1成为一个返回字典的函数。这样可以澄清你的意图。通过引用传递变量会使读者更难理解程序是如何工作的。

相关内容

最新更新