跳到对象中的下一次迭代以进行循环

时间:2015-01-08 17:05:57

标签: vba

我想开始说这个问题旨在获得理论背景,而不是针对特定编码问题的修复。换句话说,我之所以这样问,只是因为我想学习并得到一个明确的声明“是的,它是可能的”,“不,这是不可能的”,我无论如何都找不到。假设我有三个集合对象:

Dim a As New Collection
Dim b As New Collection
Dim c As New Collection

我在第一个位置添加一个布尔值:

a.Add True
b.Add False
c.Add True

并将三个转换为第四个集合对象:

Dim d As New Collection
d.Add a
d.Add b
d.Add c

我想知道如果不满足条件<=>如何(或者如果)跳到下一个对象。在伪VBA代码(不可执行)中,我会想象这样的事情:

For Each coll In d
    'do some stuffs
    If coll(1) = False Then 'if object is false, go to the next object
        Next coll 'not compilable line
    End If
    'do some other stuff if the check has passed
Next coll

我毫不怀疑我可能会使用这种令人讨厌的GoTo语句来获得我的结果:

For Each coll In d
    'do some stuffs
    If coll(1) = False Then 'if object is false, go to the next object
        GoTo NEXTOBJECT
    End If
    'do some other stuff if the check has passed
 NEXTOBJECT:
 Next coll

...或者我可能将“if - then”块嵌入到一个大的if语句中:

For Each coll In d
    'do some stuffs
    If coll(1) <> False Then 'if object is false, go to the next object
        'do some other stuff if the check has passed
    End If
Next coll

......这无疑比使用GoTo更优雅。我的问题一再被问到SO,但问题是所有(接受的和非接受的)答案都是那种怎么样?而不是这就是< / em>或这是不可能的。所以我的问题是: VBA是否为这类问题提供了这样的声明,或者我应该接受这样一个事实,即如果没有GoTo或没有在if语句中嵌套条件块,就不可能跳过一组指令?

我添加了VB.NET提供ContinueFor关键字的信息(不知道它是否有用)。我当然要查找并行VBA文档或Google - &gt; “继续为VBA”,但没有任何关于它的说法,只是“解决方法”而没有说明是否其他方面都不可能。

2 个答案:

答案 0 :(得分:0)

使用函数或子函数包装集合上的每个操作,避免尝试将所有代码都塞进一个位置。将来维护起来会更容易。

您的主要代码:

If CheckConditionOnMyCollection(Col1) Then
...

你的职能:

Function CheckConditionOnMyCollection (col as Collection) As Boolean

答案 1 :(得分:0)

尝试“继续” 也只要你有“如果条件”只使用if - endif块但更改为if if(1)= true然后..... 我认为你在循环和寻找一个值时会使用continue或exit。然后当你找到它时,你停止寻找,得到它?

For Each coll In d
    If coll(1) = False Then 
        CONTINUE FOR
    End If
    process(x)
 Next coll

SAME AS

For Each coll In d
    If coll(1) = TRUE Then 
            process(x)
    End If
 Next coll