當我在VBA中使用字典時,我被一個問題所困擾。我想用一個字典和一個 do-while 回圈來作業的原因是我有不同長度的變數,我想通過這些變數進行回圈。 首先我想給字典的鍵和項。 我之所以在每個回圈中跳過一列,是因為每個系列都有一個包含日期的列,然后是包含價格的列。如果可能的話,我想在同一個字典中捕獲與價格相匹配的日期。
Sub opg1(dicSPX As Object)
Dim i As Integer, m As Integer.
Dim varColLeng As Variant
Set dicSPX = CreateObject("Scripting.Dictionary"/span>)
m =10
Sheets("Data").激活
ReDim intCol(1 To nCol)
'opretter dictionary>
ReDim n(1 To m)
Do While n <> ""
For i = 1 To mn
' redim 保留 IntColLen
dicSPX.Add Cells(1, 2 ((i - 1) * 2) )。) Value, Range(Cells(9, 2 ((i - 1) * 2) )。) Cells(n, 2 ((i - 1) * 2) )。 價值
Next i
回圈[/span
結束 子
然后我想對我的Dic中的所有鍵執行一個程序。我想計算不同時間序列的回報。 然而,當我呼叫dic中的sub Returns()時,我得到一個錯誤(Compile error: Variable not defined)。我是字典的新手,我可能錯過了一個小細節。
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) = 計算這里的回報。
下一步。
下一步 下一步
Next Next
有什么建議嗎?我希望問題是清楚的。
謝謝你
uj5u.com熱心網友回復:
通過拋出錯誤后高亮顯示的那一行,應該可以清楚地看到哪個變數沒有被定義。我一看就知道你沒有定義i或j:
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) = 在這里計算return。
下一個。
下一步 下一步
下一步 下一步
End Sub
你應該總是明確地定義每個變數,一次一行,就在它們被使用之前。這樣,宣告總是在使用的附近,所以你可以在同一頁上看到它。
你也應該讓 opg1 成為一個回傳字典的函式。這將闡明你的意圖。通過參考來傳遞一個變數會使讀者更難知道程式是如何作業的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/307760.html
標籤:
