문제

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
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top