我正在尝试使用嵌套的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
答案 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