2017-01-27 12 views
0

我有3個變體數組: 數組1 數組2 ARRAY3如何增加循環計數器的值作爲數組名後綴

我想for循環加我的計數器值到數組名稱的末尾保存通過例如重複相同的代碼行而不是

For i = 1 To oXlWkBk.Sheets.Count 
FillArray ArraySource & i, "B1:" & oCurrentWs.Cells(lNumRows, lNumCols).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
Next i 

  • 陣列&我
  • 陣列& CSTR(I)
  • 陣列(我)
  • For i = 1 To oXlWkBk.Sheets.Count 
    FillArray ArraySource1, "B1:" & oCurrentWs.Cells(lNumRows, lNumCols).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
    
    FillArray ArraySource2, "B1:" & oCurrentWs.Cells(lNumRows, lNumCols).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
    
    FillArray ArraySource3, "B1:" & oCurrentWs.Cells(lNumRows, lNumCols).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
    Next i 
    

    我已經嘗試使用

是否可以追加計數器值作爲後綴來完成數組名稱?

+0

都能跟得上。把它們放在一個'Scripting.Dictionary'中。然後你可以使用字符串鍵。 – Comintern

+1

...或者把你的數組放在數組中,並使用數字索引 –

回答

1

這應該工作:

Dim Arrays As Variant 
Arrays = Array(Array1, Array2, Array3) 

For i = 1 To oXlWkBk.Sheets.Count 
    FillArray Arrays(i-1), "B1:" & oCurrentWs.Cells(lNumRows, lNumCols).Address(RowAbsolute:=False, ColumnAbsolute:=False) 
Next i 

由於Array()返回基於0陣列,你需要小心的指標。

+0

感謝您的建議。當我嘗試這個時,我得到一個編譯錯誤:類型不匹配:數組或預期的用戶定義類型。不知道爲什麼這是因爲我已經有陣列數組通過'公共數組()聲明爲Variant' – KnightFallz

+0

@BLothian放下'()'並將其聲明爲'數組作爲Variant'而不是'Arrays()As Variant'。您不需要將'Arrays'聲明爲數組 - 只需將其聲明爲一個簡單的變量變量即可。碰巧包含數組的變體和變體數組之間有區別。同樣的道理,如果仍然存在問題,你可以改變'FillArray'的聲明,以便它的第一個參數是一個簡單的變體,而不是更具體,儘管這不太可能是問題。 –

+0

謝謝約翰,那就是訣竅 – KnightFallz

0

您可以嘗試將所有三個數組存儲在數組中,然後引用包含i的數組?例如,

Sub test() 
largerArray = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9)) 
For i = 0 To 2 
    Debug.Print (sumArray(largerArray(i))) 
Next i 
End Sub 
Function sumArray(thisArray As Variant) As Integer 
sumArray = 0 
For i = LBound(thisArray) To UBound(thisArray) 
    sumArray = sumArray + thisArray(i) 
Next i 
End Function 

所以你的情況,你會

largerArray=Array(ArraySource1, ArraySource2, ArraySource3) 
for i=0 to oXlWkBk.Sheets.Count 
    FillArray largerArray(i), "B1:" & oCurrentWs.Cells(lNumRows, lNumCols).Address(RowAbsolute:=False, ColumnAbsolute:=False) 

etc.