For-Next 루프 내에서 다음 항목으로 이동
문제
For-Next 루프가 있습니다.루프 내에서 여러 가지 다른 기준을 테스트하고 테스트가 실패하면 해당 시점에서 루프의 나머지 코드를 건너뛰고 "다음" 항목으로 넘어갈 준비가 됩니다.현재 내가 처리하는 방식은 "Next" 바로 앞 줄로 이동하는 GoTo 문을 사용하는 것입니다.GoTo 문을 사용하고 싶지 않습니다. For-Next 루프 내에서 "다음" 항목으로 이동하는 다른 방법이 있습니까?티아!
For x = 1 to 10
Test 1
If Test 1 fails then
GoTo Line1
End if
Test 2
If Test 2 fails then
GoTo Line1
End if
.
.
.
If all tests pass then
add item to array
End if
Line1:
Next
해결책
다음은 continue
키워드의 부족을위한 해결 방법입니다.
For x = 1 to 10
Do
Test 1
If Test 1 fails then
Exit Do
End if
Test 2
If Test 2 fails then
Exit Do
End if
.
.
.
If all tests pass then
add item to array
End if
Loop While False
Next
. 다른 팁
불행히도 없습니다 continue
-같은 진술 for
vba에서 루프를 실행하세요.(관련 제어 구조 Exit For
존재하지만 여기서는 도움이 되지 않습니다).
그리고 이용에 대해 예약을 해 두는 것이 좋습니다. GoTo
:그들은 코드를 따라가기 어렵게 만듭니다.
가장 좋은 방법은 루프의 코드를 별도의 함수에 넣고 사용하는 것입니다. Exit Function
해당 기능 내에서 적절한 지점에 위치합니다.그런 다음 오류 코드를 호출자에게 다시 전달하여 코드 확장을 도울 수도 있습니다.
다른 사다리가있는 경우 사용할 수 있습니다 :
For x = 1 to 10
if test 1
else if test 2
else if test 3
.
.
.
.
else
add item to array
end if
Next
.
Goto Goto는 코드간에 뛰어 들리는 직접적인 방법이 없습니다. 이것이 도움이 될 수 있기를 바랍니다.
테스트가 너무 많지 않다면 다음을 사용할 수 있습니다. Not
조건을 지정하고 중첩된 빌드를 만듭니다. If
성명.테스트에 실패하면 종료되기 때문에 이는 요청한 것과 거의 동일한 효과를 가져야 합니다. If
문을 실행하고 다음 테스트를 실행하지 않고 코드를 루프의 다음 X로 이동합니다.
다음은 5부터 10까지의 숫자를 포함하는 배열을 만드는 두 개의 테스트 루프입니다.
Sub TestConditionalPass()
Dim intX As Integer
Dim intArray() As Integer
ReDim intArray(1)
For intX = 1 To 10
If Not intX -2 < 1 Then
If Not intX * 2 < 10 Then
ReDim Preserve intArray(UBound(intArray) + 1)
intArray(UBound(intArray)) = intX
End If
End If
Next intX
End Sub
모든 테스트가 성공한 경우에만 작업을 예약하고 있기 때문에 ANDS와 if 문을 수행하십시오. VBA는하지 않습니다단락 회로 테스트 (즉, 첫 번째 테스트 케이스가 False를 반환하더라도 각 테스트 케이스를 평가합니다.) 코드를 정리하기 위해 코드를 정리하기 위해 부울을 반환하는 함수의 각 테스트를 캡슐화하는 것이 좋습니다.
If Test1() and _
Test2() and _
testn() THEN
add item to array
End if
.
다른 방법은 코드에서 Boolean 변수를 사용하는 것입니다.이
Dim Success as Boolean
Success=True
Test 1
If Test 1 fails then
Success=false
End if
Test 2
If Test 2 fails then
Success=false
End if
.
.
.
If Success then
add item to array
End if
.
테스트가 비용이 비싸면 내부 IF 문을 추가하여 다음 테스트를 이와 같이 다음 테스트를 평가 해야하는지 확인해야합니다.
If Success Then
If Test n fails then
Success=false
End If
End if
.