2015-08-27 49 views
0

的StackOverflow,如何在VBA詞典更新值

以下子程序的意圖:

  • 採取一個詞典(的ByRef),值類型=雙,OR
  • 採取字典字典(ByRef),子字典值類型= double,並且
  • 將計算「ApproxGeometricReturn」應用於字典中的每個值。

雖然代碼成功運行,它不能計算適用於作爲參數(爲ByRef)傳遞的字典中的每個值。

請提出我可能出錯的地方。我也試圖把這寫成一個遞歸子程序而沒有成功。

Private Sub ApproxiamteGeometricReturns(ByRef LogReturnDictionary As Variant) 
    For Each Item In LogReturnDictionary.Items 
    If TypeName(Item) = "Double()" Then 
     For Each i In Item 
     i = ApproximateGeometricReturn(i) 
     Next 
    Else 
     Item = ApproximateGeometricReturn(Item) 
    End If 
    Next 
End Sub 

任何建議將熱烈收到。謝謝。

+1

如果要修改存儲在Dictionary中的數組,首先需要從字典中提取數組。一旦完成修改數組,您可以將其放回字典中。參見:http://stackoverflow.com/questions/21940111/updating-an-array-stored-in-a-vba-dictionary/21941361#21941361 –

回答

0
Private Sub ApproxiamteGeometricReturns(ByRef LogReturnDictionary As Variant) 
    For Each keyName In LogReturnDictionary.Keys 
    If TypeName(LogReturnDictionary(keyName)) = "Double()" Then 
     Dim arr As Variant: arr = LogReturnDictionary(keyName) 
     Dim index As Integer 
     For index = LBound(arr) To UBound(arr) 
     arr(index) = ApproximateGeometricReturn(arr(index)) 
     Next 
     LogReturnDictionary(keyName) = arr 
    Else 
     LogReturnDictionary(keyName) = ApproximateGeometricReturn(LogReturnDictionary(keyName)) 
    End If 
    Next 
End Sub