2016-07-07 2 views
0

다른 코드를 살펴볼 수 있기를 바랍니다. 나는 비교적 큰 If ... Else ... 문장을 쓰고있다. 모든 것이 제대로 코딩되어있는 것 같습니다. 나는 전체 대본을 밟았지만 하나의 자리가 나를 계속주고있다. "Expected 'End If'" 나에게는 그럴 필요가 없다고 생각 될 때.Else Statement에서 End If 문이 누락되었다는 오류가 발생하는 경우

간단히 말하면 다음과 같이 말하고자합니다. 예를 들어, 상황에 따라이를 수행하십시오. 그렇지 않으면 어쩌면 그 중 하나만하십시오.

여기에 코드 블록의 :

If(sLogFile <> "" AND nPing <> 1) Then 
    pingStatus = 1 

    If(findTag(sLogFile, daRunning) = 1) Then 
     daStatus = 1 
    Else If(findTag(sLogFile, daNotRunning) = 1) Then 
     daStatus = 2 
    Else 
     daStatus = 3 
    End If 

    If(daStatus = 1 AND findTag(sLogFile, daDataFlowing) = 1) Then 
     daFlowStatus = 1 
    Else If(daStatus = 1 AND findTag(sLogFile, daDataNotFlowing) = 1) Then 
     daFlowStatus = 2 
    Else If(daStatus = 1 AND findTag(sLogFile, daDataUnchecked) = 1) Then 
     daFlowStatus = 3 
    Else If(daStatus <> 1) Then 
     daFlowStatus = 4 
    End If 

    If(findTag(sLogFile, aeRunning) = 1) Then 
     aeStatus = 1 
    Else If(findTag(sLogFile, aeNotRunning) = 1) Then 
     aeStatus = 2 
    Else 
     aeStatus = 3 
    End If 

    If(findTag(sLogFile, aeDataUnchecked) = 1) Then 
     aeFlowStatus = 2 
    Else If(findTag(sLogFile, aeDataExecutionError) = 1) Then 
     aeFlowStatus = 3 
    Else If(findTag(sLogFile, aeDataConnectionError) = 1) Then 
     aeFlowStatus = 4 
    Else If(findTag(sLogFile, aeTimeStamp) = 1) Then 
     location = InStr(sLogFile, aeTimeStamp) 
     leftTrimmedString = LTrim(Mid(sLogFile, (location - 2))) 
     location = InstrRev(leftTrimmedString, ":") 
     dateString = Trim(Mid(leftTrimmedString, 1, (location + 5))) 
     timeDiff = DateDiff("h", dateString, Now) 
     If(timeDiff > 5) Then 
      aeFlowStatus = 5 
     Else 
      aeFlowStatus = 1 
     End If 
    End If 

Else If(nPing = 1) Then 
    pingStatus = 2 

    If(findTag(sLogFile, aeDataUnchecked) = 1) Then 
     aeFlowStatus = 2 
    Else If(findTag(sLogFile, aeDataExecutionError) = 1) Then 
     aeFlowStatus = 3 
    Else If(findTag(sLogFile, aeDataConnectionError) = 1) Then 
     aeFlowStatus = 4 
    Else If(findTag(sLogFile, aeTimeStamp) = 1) Then 
     location = InStr(sLogFile, aeTimeStamp) 
     leftTrimmedString = LTrim(Mid(sLogFile, (location - 2))) 
     location = InstrRev(leftTrimmedString, ":") 
     dateString = Trim(Mid(leftTrimmedString, 1, (location + 5))) 
     timeDiff = DateDiff("h", dateString, Now) 
     If(timeDiff > 5) Then 
      aeFlowStatus = 5 
     Else 
      aeFlowStatus = 1 
     End If 
    End If 
End If 

오류는 내리막 길의 주요 Else If 2/3 (Else If(nPing = 1) Then)에서 일어나고 유지합니다. 그 줄에 오류가 생겼어.

나는 End If을 Else IF 위에 놓은 다음 Else IfIf으로 변경하여 블록을 두 블록으로 분리하려고 시도했습니다. 내가 그렇게 할 때 작동하지만, if 문 두 개가 실제로 필요하지 않습니다.

그렇다면 엉망이 되었습니까, 아니면 통역사에 문제가 있습니까?

답변

3

Visual Basic에서 "else if"문은 ElseIf이 아닌 Else If으로 기록됩니다. 나는 그것이 당신 문제라고 생각합니다.

+1

'Else If'는 VBScript에서 유효한 구문이지만 해당 'End If'도 Else 블록 내에 있어야합니다. 즉, Else 블록은 다른 If 블록을 캡슐화합니다. – Nilpo

+0

@ 닐포는 스트레치가 아닌가요? 'Else' 블록 안에 중첩 된'If'에 대해 말하면, 실제'If' 문은 같은 줄에서 시작할 필요가 없습니다. 매튜는 올바른 구문이'ElseIf'라고합니다. – Lankymart

+0

@ Lankymart 예, 그게 제가 말하고자하는 것입니다. 중첩 된 If는 같은 줄에서 시작하며 유효한 구문입니다. – Nilpo

2

ElseIf이 아닌 Else If을 사용해야하는 이유가 있습니다. 차이점을 보시겠습니까?

큰 문제는 "스파게티 코드"와 같은 거대한 덩어리로 오류를 알아내는 데 항상 어려움이 있다는 것입니다. 코드를 작고 재사용 가능한 방법으로 분해하는 것을 고려하십시오. 그렇게하면 문제가 더 쉽게 어디에 위치하는지 파악할 수 있습니다. 사실 모든 블록을 모두 샅샅이 뒤져 봐도 상처를 입는다는 것은 말할 필요도 없습니다.

+0

예, 읽는 것만 큼 쓰는 것이 끔찍했습니다. 보통 이런 식으로 코드를 작성하지는 않습니다. 당신이 그것을 읽어야하는 것을 유감스럽게 생각합니다! 그래도 도움을 주셔서 감사합니다. – Alamb

관련 문제