我想开始说这个问题旨在获得理论背景,而不是针对特定编码问题的修复。换句话说,我之所以这样问,只是因为我想学习并得到一个明确的声明“是的,它是可能的”,“不,这是不可能的”,我无论如何都找不到。假设我有三个集合对象:
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”,但没有任何关于它的说法,只是“解决方法”而没有说明是否其他方面都不可能。
答案 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