2017-01-02 98 views
0

我有一個小問題,每個循環迭代通過整數數組。我有這樣的事情:檢索索引在一個陣列VBA上的每個循環

Dim arr(3) as Integer 
Dim vari as variant 

for each vari in arr 
    debug.print vari 
next var 

雖然它返回正確的價值我也需要一種方法來指給定項目的索引號數組中(無論是ARR(1),(2 )等)。我如何在每個循環中執行此操作?我知道如何使用for x = y to z循環來做到這一點,但我寧願將它保留爲每個循環。

+0

你爲什麼會 「而保持其作爲每個循環」?你的問題基本上是「我怎麼能不使用我已經知道的工具X來設計我正在做***的工具」? – Comintern

+0

我希望能夠將它保留爲每個循環以便維護,因爲數組中項目的數量很可能會不斷變化。我沒有想到使用UBound LBound來做到這一點。 –

回答

2

如果您想輕鬆訪問元素索引,則需要使用傳統的for循環。試試這個...

Sub Test2() 

    Dim arr(3) As Integer 
    Dim vari As Variant 
    arr(0) = 5: arr(1) = 4: arr(2) = 3: arr(3) = 2 

    Dim lIdx As Long 
    For lIdx = LBound(arr) To UBound(arr) '* though you have defined the bounds to be 3 above !! anyway... 
     vari = arr(lIdx) 
     Debug.Print vari, lIdx 
    Next lIdx 
' For Each vari In arr 
'  Debug.Print vari 
' Next Var 
End Sub 

沒有得到來自For Each循環索引號方式。如果你想的證據那麼這裏就是爲強調在VB6 For Each接口IEnumVARIANT的文檔/ VBA https://msdn.microsoft.com/en-us/library/windows/desktop/ms221053(v=vs.85).aspx

+0

感謝您的鏈接。此外'LBound到UBound'就像一個魅力,消除了我對'每個'的需求。 –

0

如果你真的堅持使用For Each,那麼你需要使用一個計數器變量來跟蹤指數,即變量idx在下面的代碼:

Dim arr(1 to 3) as Integer '<-- 1 to 3 if you want your array index start with 1 instead of zero 
Dim vari as variant 
Dim idx as long: idx = LBound(arr) 

For Each vari In arr 
    debug.print "The item at index " & idx & " is: " & vari 
    idx = idx + 1 
Next vari 
0

這裏試試這個先修改它。

子forEachArray()

Dim element As Variant 
Dim animals(0 To 5) As String 
'We have created an array that can hold 6 elements 

animals(0) = "Dog" 
animals(1) = "Cat" 
animals(2) = "Bird" 
animals(3) = "Buffalo" 
animals(4) = "Snake" 
animals(5) = "Duck-billed Platypus" 
'We fill each element of the array 


For Each element In animals 
'animals consists of 6 "elements" 

    Debug.Print element 
    'printing to the immediate window 

Next 

末次