Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索数组VBA上每个循环的索引_Vba - Fatal编程技术网

检索数组VBA上每个循环的索引

检索数组VBA上每个循环的索引,vba,Vba,对于遍历整数数组的for-each循环,我遇到了一个小问题。我有这样的想法: Dim arr(3) as Integer Dim vari as variant for each vari in arr debug.print vari next var 虽然它确实正确地返回了值,但我还需要一种方法来引用数组中给定项的索引号(无论它是arr(1)、(2)等)。如何使用for-each循环执行此操作?我知道如何使用for x=y到z循环,但我更愿意将其作为for each循环。如果希望轻松

对于遍历整数数组的for-each循环,我遇到了一个小问题。我有这样的想法:

Dim arr(3) as Integer
Dim vari as variant

for each vari in arr
  debug.print vari
next var

虽然它确实正确地返回了值,但我还需要一种方法来引用数组中给定项的索引号(无论它是arr(1)、(2)等)。如何使用for-each循环执行此操作?我知道如何使用
for x=y到z
循环,但我更愿意将其作为for each循环。

如果希望轻松访问元素索引,则需要使用传统的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

对于每个循环,都有从
获取索引号的方法。如果您需要证据,那么这里是接口
IEnumVARIANT
的文档,在VB6/VBA

中为每个
加下划线
。如果您希望轻松访问元素索引,则需要使用传统的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

对于每个
循环,都有从
获取索引号的方法。如果您想要证据,那么这里是VB6/VBA中为每个
加下划线的接口
IEnumVARIANT
的文档如果您确实坚持为每个使用
,那么您需要使用计数器变量跟踪索引,即下面代码中的变量
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

Dim arr(1到3)作为整数“如果您确实坚持对每个
使用
,那么您需要使用计数器变量跟踪索引,即下面代码中的变量
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

Dim arr(1到3)作为整数“在这里,首先尝试修改它

子数组()


结束子节点

在此处尝试此操作,首先修改它

子数组()


End Sub

为什么您“宁愿将它作为一个for each循环”?你的问题基本上是“我如何在不使用我已经知道的工具的情况下执行X操作?该工具的设计目的是完全满足我的需要”?我希望能够将其作为一个for each循环,以使其更易于维护,因为数组中的项目数很可能会不断变化。我没有想到要使用UBound LBound来实现这一点。为什么您“宁愿将它作为for each循环的一部分”?你的问题基本上是“我如何在不使用我已经知道的工具的情况下执行X操作?该工具的设计目的是完全满足我的需要”?我希望能够将其作为一个for each循环,以使其更易于维护,因为数组中的项目数很可能会不断变化。我没有想到要用UBound来做这件事。谢谢你的链接。另外,“lbund to ubund”也很有魅力,消除了我对“for each”的需求。谢谢你的链接。此外,“LBound to UBound”也很有魅力,消除了我对“for each”的需要。否决投票的原因:这个答案忽略了问题的要点——在for each中获取索引。改进建议:显示如何打印索引,而不是值。拒绝投票的原因:此答案忽略了问题的要点-将索引置于for Each的内部。改进建议:显示如何打印索引,而不是值。