退出嵌套For循环VBA并重新循环

时间:2016-01-12 23:44:10

标签: arrays vba excel-vba for-loop nested

我正在尝试使用嵌套的For循环。我基本上有2个数组,我想使用array1中的第一个变量和array2中的第一个变量来执行某些操作,依此类推,直到数组耗尽为止。不幸的是,Exit For不会退出For级别。所以我尝试使用goTo命令,然后我得到一个错误“这个数组是固定的或暂时锁定的”,因为我正在尝试重新访问该数组。我被困在如何在VBA中解决这个问题。下面是我的代码,在MsgBox中将进行一些操作(需要对(dAFL,AFL),(dSF,SF)等):

For Each vN In Array(dAFLcell, dSFcell, dSOcell, dFIGcell, dIBAcell, dIBXcell)
a = 0
For Each vN2 In Array(AFLcell, SFcell, SOcell, FIGcell, IBAcell, IBXcell)


If i = a Then
    MsgBox a
    GoTo end_of_for
End If
a = a + 1
Next vN2
end_of_for:
i = i + 1
Next vN

2 个答案:

答案 0 :(得分:2)

您可以使用布尔标志 - 我不知道它是可接受的方法,但我会不时使用它。

Dim skipBool as Boolean = False    

For Each vN In Array(dAFLcell, dSFcell, dSOcell, dFIGcell, dIBAcell, dIBXcell)
    a = 0 'I think you want this out here, otherwise a will always equal 0
    For Each vN2 In Array(AFLcell, SFcell, SOcell, FIGcell, IBAcell, IBXcell)    
        If Not skipBool Then 'run this stuff only if we don't want to skip it (duh!)       

            If i = a Then
                MsgBox a
                skipBool = True 'set skipBool to be True (we want to skip it!)
            End If
            a = a + 1
        End If
    Next vN2
    i = i + 1
    skipBool = False 'reset skipBool for the next go around
Next vN

我确信这段代码可以进一步优化(说实话,我还没有对它进行过测试),但看起来这就是你的目标。

说实话,唯一的问题可能是a = 0在第二个for循环中,这就是为什么你没有得到预期的结果。我已经有一段时间了,因为我使用过VBA(我只使用过VB.NET),所以我不记得那里的确切语法。我试着修复它,然后返回方法的出口。如果它仍然不起作用,我的代码应该。

答案 1 :(得分:2)

这是另一种可能的方法:

  Dim vn, Vn2 As Variant
  Dim i, min As Integer

  vn = Array(dAFLcell, dSFcell, dSOcell, dFIGcell, dIBAcell, dIBXcell)
  Vn2 = Array(AFLcell, SFcell, SOcell, FIGcell, IBAcell, IBXcell)

  If UBound(vn) <= UBound(Vn2) Then
    min = UBound(vn)
  Else
    min = UBound(Vn2)
  End If

  For i = LBound(vn) To min
    If vn(i) = Vn2(i) Then
      MsgBox vn(i)
      Exit For
    End If
  Next i