Search code examples
excelvbauserform

Why do I keep getting the 'Else Without If' error on the following code?


I am hoping someone can help me with the following code. I keep getting the 'Else Without If' control error and I don't understand why?

If Sheets("Travel Expense Voucher").Range("D5") = 2 And Sheets("Travel Expense Voucher").Range("Meals") <> "" Then Sheets("Expense Code Processing").Range("C2") = "62495"
    ElseIf Sheets("Travel Expense Voucher").Range("D5") = 1 And Sheets("Travel Expense Voucher").Range("Meals") <> "" And cmbOVNRTN = ("Return") And cmbInOutState = ("In-State") Then Sheets("Expense Code Processing").Range("C2") = "62407"
    ElseIf Sheets("Travel Expense Voucher").Range("D5") = 1 And Sheets("Travel Expense Voucher").Range("Meals") <> "" And cmbOVNRTN = ("Overnight") And cmbInOutState = ("In-State") Then Sheets("Expense Code Processing").Range("C2") = "62410"
    ElseIf Sheets("Travel Expense Voucher").Range("D5") = 1 And Sheets("Travel Expense Voucher").Range("Meals") <> "" And cmbOVNRTN = ("Return") And cmbInOutState = ("Out-of-State") Then Sheets("Expense Code Processing").Range("C2") = "62430"
    ElseIf Sheets("Travel Expense Voucher").Range("D5") = 1 And Sheets("Travel Expense Voucher").Range("Meals") <> "" And cmbOVNRTN = ("Overnight") And cmbInOutState = ("Out-of-State") Then Sheets("Expense Code Processing").Range("C2") = "62417"
End If

Solution

  • Indentation is needed for the If statement.

    Also, you can use variables and a With statement to make it more clear. I also added a Boolean to make the ElseIf a little shorter:

    Sub t()
    Dim ws As Worksheet, destWS As Worksheet
    Set ws = Sheets("Travel Expense Voucher")
    Set destWS = Sheets("Expense Code Processing")
    Dim oneMeal As Boolean
    oneMeal = False
    With ws
        If .Range("D5") = 1 And .Range("Meals") <> "" Then oneMeal = True
        If .Range("D5") = 2 And .Range("Meals") <> "" Then
            destWS.Range("C2") = "62495"
        ElseIf oneMeal And cmbOVNRTN = ("Return") And cmbInOutState = ("In-State") Then destWS.Range("C2") = "62407"
        ElseIf oneMeal And cmbOVNRTN = ("Overnight") And cmbInOutState = ("In-State") Then destWS.Range("C2") = "62410"
        ElseIf oneMeal And cmbOVNRTN = ("Return") And cmbInOutState = ("Out-of-State") Then destWS.Range("C2") = "62430"
        ElseIf oneMeal And cmbOVNRTN = ("Overnight") And cmbInOutState = ("Out-of-State") Then destWS.Range("C2") = "62417"
        End If
    End With
    End Sub