2017-08-07 11 views
-1

VBAに関する経験はあまりなく、バックエンド機能を記述して特定のフィールドを集計しようとしています別のフィールドの値。私はネストされたIf ThenとElseIf Then文を持っていて、最初のElseIfでエラーが発生しています。ここではブロックが質問にあります:VBAで「エラーが発生していない場合はコンパイルエラー:それ以外の場合」

ElseIf rCell.Value = "Blueprint" Then 
    aCell = Range("DR") 
    If aCell.Value = "Yes" Then 
     aCell = Range("ER") 
      If aCell.Value = "Yes" Then 
       PHASEREVIEWCHECKER = True 
      End If 
      ElseIf aCell.Value = "No" Or aCell.Value = "N/A" Or aCell.Value = "Unknown" Then 
       PHASEREVIEWCHECKER = False 
     End If 
    ElseIf aCell.Value = "No" Or aCell.Value = "N/A" Or aCell.Value = "Unknown" Then 
     PHASEREVIEWCHECKER = False 
    End If 

私はこの問題に見つけたのソリューションのほとんどは、すべてのその後の後、インデントや、十分なエンドIFSがあります確認して関与し、私はそれをやったし、問題が解決しません。どんな助けでも大歓迎です。

編集2:問題が解決しましたが、問題が解決するまでEnd Ifsで修正されました。すべての助けをありがとう!

+2

を簡略化し、あなたの長いネストされたIFSです。 'PHASEREVIEWCHECKER = True'に続く' End If'行を削除してください – tigeravatar

+0

最後の 'End If'の後ろに別の' End If'を置くか 'If .... end if'コード全体を表示 – Jeeped

+2

あなたのコードをインデントする方法を学びますこれらの問題を回避します。 – YowE3K

答えて

2

それぞれのElseIfは、独自のEnd If

また、適切なインデントは、これらの問題を見つけることができます取得していません。

適切な方法がある:

IF ... Then 
    'do somthing 
ElseIf 
    'do somthing 
Else 
    'do somthing 
End If 

ElseIfElseは任意であることです。ここで

ElseIf rCell.Value = "Blueprint" Then 
    aCell = Range("DR") 
    If aCell.Value = "Yes" Then 
     aCell = Range("ER") 
     If aCell.Value = "Yes" Then 
      PHASEREVIEWCHECKER = True 
     ElseIf aCell.Value = "No" Or aCell.Value = "N/A" Or aCell.Value = "Unknown" Then 
      PHASEREVIEWCHECKER = False 
     End If 
    ElseIf aCell.Value = "No" Or aCell.Value = "N/A" Or aCell.Value = "Unknown" Then 
     PHASEREVIEWCHECKER = False 
    End If 
End If 

は、あなたが問題を引き起こしているのElseIf前にif文その終了です `エンドIf`を持ってAnd

Public Function PHASEREVIEWCHECKER(R As Integer) 
Dim rCell As Range 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
Set rCell = Range("CR") 
If rCell.Value = "Initiate" Then 
    If Range("DR").Value = "Yes" Then 
     PHASEREVIEWCHECKER = True 
    Else 
     PHASEREVIEWCHECKER = False 
    End If 
ElseIf rCell.Value = "Blueprint" Then 
    If Range("DR").Value = "Yes" And Range("ER") = "Yes" Then 
     PHASEREVIEWCHECKER = True 
    Else 
     PHASEREVIEWCHECKER = False 
    End If 
ElseIf rCell.Value = "Design" Then 
    If Range("DR").Value = "Yes" And Range("ER").Value = "Yes" And Range("FR").Value = "Yes" Then 
     PHASEREVIEWCHECKER = True 
    Else 
     PHASEREVIEWCHECKER = False 
    End If 
ElseIf rCell.Value = "Build" Then 
    If Range("DR").Value = "Yes" And Range("ER").Value = "Yes" And Range("FR").Value = "Yes" And Range("GR").Value = "Yes" Then 
     PHASEREVIEWCHECKER = True 
    Else 
     PHASEREVIEWCHECKER = False 
    End If 
ElseIf rCell.Value = "Test & Train" Then 
    If Range("DR").Value = "Yes" And Range("ER").Value = "Yes" And Range("FR").Value = "Yes" And Range("GR").Value = "Yes" _ 
     And Range("HR").Value = "Yes" Then 
     PHASEREVIEWCHECKER = True 
    Else 
     PHASEREVIEWCHECKER = False 
    End If 
ElseIf rCell.Value = "Deploy & Operate" Then 
    If Range("DR").Value = "Yes" And Range("ER").Value = "Yes" And Range("FR").Value = "Yes" And Range("GR").Value = "Yes" _ 
     And Range("HR").Value = "Yes" And Range("IR").Value = "Yes" Then 
     PHASEREVIEWCHECKER = True 
    Else 
     PHASEREVIEWCHECKER = False 
    End If 
End If 
Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 
End Function 
+0

残念ながら、あなたのコードは私に同じエラーを与えています – JPezzulla

+0

その後、私はあなたのために編集したスニペットではなくエラーがあるので、IF文全体を表示する必要があります。 –

+0

これをメインポストに編集しました – JPezzulla

関連する問題