Compile error else without if vba

What you’re seeing is a compile error that indicates that an Else (or ElseIf) keyword was not preceded by a correct If statement. Meaning, the compiler found an Else statement (which it will highlight for the user) without seeing an If statement in the lines

else without if error popup

What you’re seeing is a compile error that indicates that an Else (or ElseIf) keyword was not preceded by a correct If statement.

Meaning, the compiler found an Else statement (which it will highlight for the user) without seeing an If statement in the lines above it. This is an error because it violates the correct syntax of an If-Then-Else statement. The correct syntax is as follows:

For using the shorthand syntax for if statement that specifies a condition and an action (for when the condition is met):

If [Test Expression] Then [Action]

To use the standard syntax for an If statement that specifies a condition and an action (for when the condition is met) and an alternate action for when the condition is not met:

If [Test Expression] Then

[Action]

Else

[Alternate Action]

End if

For specifying more than one condition (and their actions):

If [Test Expression] Then

[Action]

ElseIf [Test Expression 2] Then

[Action 2]

Else

[Alternate Action]

End if

The compiling error “Else Without If” occurs when “If [Test Expression] Then “ is missing or written incorrectly. Let’s discuss the common causes of the error further in details below with examples.

Contents

  • Missing If Statement
    • Example 1: Missing If Statement
    • Example 2: Else statement is inside a loop and If statement is outside
  • Incorrect If Statement
    • Example 3: Placing the action on the same line with If Statement

Missing If Statement

When VBA compiler sees that the Else keyword is not preceded by a recognizable (correct) If statement, it generates an error ‘Else without If’. For every Else, there must be an If statement. However, for every If, we do not necessarily need an else statement.

Example 1: Missing If Statement

In this example, we display an input box that takes the user’s input and stores it in x. Then we encounter an Else keyword, but there was no If statement prior to it. This indeed will cause a compiler error: Else Without If.

Sub Else_Without_If()
x = InputBox("Set x value")'
'if statement should go here, but it’s missing. This will cause a compile error: Else without If
     MsgBox = "x value is equal to 1"
Else
     MsgBox = "x value is not equal to 1"
End If
End Sub

To solve this problem, we just need to add an If statement. An If statement consists of If [condition] Then.

Sub Else_Without_If()
x = InputBox("Set x value")
If x = 1 Then
     MsgBox = "x value is equal to 1"
Else
     MsgBox = "x value is not equal to 1"
End If
End Sub

correct input popup

x value is equal to 1 popup

Following good indentation practices is crucial for recognizing whether each if-else-then logic consists of the necessary  keywords (If statement, Else keyword, End If keyword).

If [condition] Then

[action]

Else

If [condition] Then

[action]

Else

[action]

End If

[action]

End If

Example 2: Else statement is inside a loop and If statement is outside

You might be surprised that you are getting the error when you already have the If statement present in the code and placed prior to the Else keyword and written correctly. The problem might not be apparent at first glance. But if we look closer, we will see that the scope of the If statement is different from that of the else statement.

Everything between the If statement and the End If keyword belongs to the scope of this If statement. Other scopes can also exist in the code due to the existence of loops such as For Next loop, Do Until loop or For Each Next loop.

A scope exists when a logical statement requires multiple keywords to indicate the start and end points of the statement. A problem occurs if you overlap scopes in a way that causes one to be partially placed inside the other. The correct way to have multiple scopes work with each other is to have one totally placed inside the other.

In the following example, If [condition] Then is followed by the beginning of a For loop followed by the Else keyword. This separates the If statement and the Else keyword and causes the error to show up.

Sub Else_Without_If()
x = InputBox("Set x value")
'starting the if statement scope
If x = 1 Then
     MsgBox "x value is equal to 1"
     ‘starting a new scope (For Next loop)
     For R = 1 To 5
'Else keyword is separated from its If statement because it’s in a different scope.
Else
     Next R
     MsgBox "x value is not equal to 1"
End If
End Sub

else without if on example

To fix the issue, we ensure that the If logical statement as a whole is fully encompassed within the For loop. Or the For loop is fully encompassed within the If logical statement Action; between If and Else or between Else and End If.

As a general rule, if a section of your code has a some status due to having a starting and ending point (If – Else, Else – End  If, For – Next, Do – Until) then you cannot start another section (scope) within it without ending it within the first section.

Start Point (If, Else, For, Do)

Another Start Point

Do Something

Another End Point

End Point (Else, End If, Next, Until)

To apply this to our example, we change it to the following code;

Sub Else_Without_If()
x = InputBox("Set x value")
'starting the if statement scope
If x = 1 Then
     MsgBox "x value is equal to 1"
     'starting a new scope (For Next loop)
     For R = 1 To 5
          MsgBox "x value is equal to 1"
     'ending the new scope within the same scope it was started in
     Next R
Else
     MsgBox "x value is not equal to 1"
End If
End Sub

Incorrect If Statement

Example 3: Placing the action on the same line with If Statement

Another very common mistake that is often made is to write the If statement in a way that is not compatible with utilizing the Else keyword.

If we want to use the Else keyword, we must place the action part of the If-Then-Else logic in the next line after the if statement. If we are not using the Else keyword, then we can place the action on the same line as the If statement and we do not write the Else keyword or the End If keyword.

When the action (that should be carried out if the condition is true) is placed on the same line as the If statement, then the If statement is considered complete. This is considered a shorthand way of writing the If – then logic.

That is why when compiler encounters an Else keyword after that, it does not find an If statement that belongs to the Else keyword, because that If statement has been completed with placing the action on the line as the If statement. The following code is NOT correct and will cause the compiler error: Else without If.

Sub Else_Without_If()
x = InputBox("Set x value")
If x = 1 Then MsgBox "x value is equal to 1"
Else
     MsgBox "x value is not equal to 1"
End If
End Sub

The action (MsgBox "x value is equal to 1") needs to be placed on the next row after the If statement in order to be able to have an Else statement used in the If-Then-Else logic. In the following code, we moved in the action statement to the next line, which fixes the problem.

Sub Else_Without_If()
x = InputBox("Set x value")
If x = 1 Then 
     MsgBox "x value is equal to 1"
Else
     MsgBox "x value is not equal to 1"
End If
End Sub

We now have covered all the possible causes of compile error: Else without if. To recap, if you get this error, check whether

1) There is an If statement in place that precedes the Else keyword.

2) The if statement line does not contain anything other than If [condition] Then.

3) Verify that the If statement and the Else keyword are not separated by another scope or section, such as loops.

See also: How to Fix the “End If without block If” Error

I’m trying to run the following code, but I keep getting the Else without If Error in the first sub. The code is supposed to run through a column, open webpages if there is a url in the cell, then save the page info as a text file. If there is no url, then it just saves the text within that file as a text file. I can’t figure out how to change the syntax to get it to work.

Sub LoopOverB()

Dim myRow As Long

myRow = 10

While Worksheets("Input_Format_A").Cells(myRow, 2).value <> ""
    If InStr(1, Worksheets("Input_Format_A").Cells(myRow, 2).value, "http://", vbTextCompare) Then Call url_Test(Worksheets("Input_Format_A").Cells(myRow, 2).value, "C:mallettest" & Worksheets("Input_Format_A").Cells(myRow, 1).value & ".txt")
        myRow = myRow + 1
    Else
        Open "C:mallettest" & Worksheets("Input_Format_A").Cells(myRow, 1) & ".txt" For Append As #1
        Print #1, Worksheets("Input_Format_A").Cells(myRow, 2).value
        Close #1

        myRow = myRow + 1
    End If
Wend
End Sub


Sub url_Test(URL As String, Filename As String)

Dim FSO As Object
Dim ieApp As Object
Dim Txt As String
Dim TxtFile As Object

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TxtFile = FSO.OpenTextFile(Filename, 2, True, -1)

Set ieApp = CreateObject("InternetExplorer.Application")
ieApp.Visible = True
ieApp.Navigate URL

While ieApp.Busy Or ieApp.ReadyState <> 4
    DoEvents
Wend

Txt = ieApp.Document.body.innerText
TxtFile.Write Txt
TxtFile.Close

ieApp.Quit

Set ieApp = Nothing
Set FSO = Nothing
End Sub

Здравствуйте. Наверное, напутала что-то с типами данных.. При выполнении данного макроса возникает ошибка «Else without if» :  

  Sub Macros()  
Dim i As Integer  
Dim j As Integer  
Dim x As Integer  
Dim y As Integer  
Dim A As Double  

  x = ActiveCell.Row  
y = ActiveCell.Column  
i = x  

  Do While ((ColorIndex(Cells(i, y))) <> 21)  
   Cells(i, y + 6).Value = Cells(i, y + 1).Value  
   Cells(i, y + 1).Formula = «=MID(RC[-1],SEARCH(«»??.??.????»»,RC[-1],1),10)»
   Cells(i, y + 1).NumberFormat = «m/d/yyyy»  
   Cells(i, y + 2).NumberFormat = «0»  
   Cells(i, y + 3).NumberFormat = «m/d/yyyy»  
   Cells(i, y + 3).Value = Cells(i, y + 1).Value + Cells(i, y + 2).Value  
   Cells(i, y + 4).NumberFormat = «m/d/yyyy»  
   Cells(i, y + 4).Formula = «=TODAY()»  
   Cells(i, y + 5).NumberFormat = «0»  
   Cells(i, y + 6).NumberFormat = «#,##0.00»  
   Cells(i, y + 7).NumberFormat = «#,##0.00»  
   Cells(i, y + 8).NumberFormat = «#,##0.00»  
   Cells(i, y + 9).NumberFormat = «#,##0.00»  
   Cells(i, y + 10).NumberFormat = «#,##0.00»  
   Cells(i, y + 11).NumberFormat = «#,##0.00»  
   Cells(i, y + 12).NumberFormat = «#,##0.00»  
   Cells(i, y + 13).NumberFormat = «#,##0.00»  
   Cells(i, y + 14).NumberFormat = «#,##0.00»  
   Cells(i, y + 5).Value = Cells(i, y + 4).Value — Cells(i, y + 3).Value  
   Cells(i, y + 2).Value = 30  
   A = Cells(i, y + 5).Value  
   If (A <= 0) Then Cells(i, y + 7).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 7).Value = Cells(i, y + 16).Value  
   If ((A > 0) And (A <= 30)) Then Cells(i, y + 8).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 8).Value = Cells(i, y + 16).Value  
   If ((A > 30) And (A)) Then Cells(i, y + 9).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 9).Value = Cells(i, y + 16).Value  
   If ((A > 45) And (A <= 60)) Then Cells(i, y + 10).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 10).Value = Cells(i, y + 16).Value  
   If ((A > 60) And (A <= 75)) Then Cells(i, y + 11).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 11).Value = Cells(i, y + 16).Value  
   If ((A > 75) And (A <= 90)) Then Cells(i, y + 12).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 12).Value = Cells(i, y + 16).Value  
   If (A > 90) Then Cells(i, y + 13).Value = Cells(i, y + 6).Value  
   Else: Cells(i, y + 13).Value = Cells(i, y + 16).Value  
   Cells(i, y + 14).Value = Cells(i, y + 8).Value + Cells(i, y + 9).Value + Cells(i, y + 10).Value + Cells(i, y + 11).Value + Cells(i, y + 12).Value + Cells(i, y + 13).Value  
Loop  
   j = y  
   i = x  
   Do While ((ColorIndex(Cells(i, y))) <> 21)  
       For j = y + 1 To 14  
           Cells(i, j).Interior.ColorIndex = ColorIndex(Cells(i, x))  
           If Cells(i, j).Interior.ColorIndex = 24 Then Cells(i, j).Value = Cells(x, y + 16).Value  
           End If  
       Next j  
   Loop  
   For j = 6 To 14  
       Summa_po_tsvetam (Cells(x, j))  
   Next j  
End Sub  

  Подскажите, пожалуйста, в чем моя ошибка?

  • #1

Hi guys,

I’m new at writing vba and am trying to get this user form working but keep getting the compile error: Else without if.

Code:

Private Sub cmdOK_Click()
    ActiveWorkbook.Sheets("Course Bookings").ActivateRange("A1").Select
    Do
    If IsEmpty(ActiveCell) = False Then
        ActiveCell.Offset(1, 0).Select
    End If
    Loop Until IsEmpty(ActiveCell) = True
    ActiveCell.Value = txtName.Value
    ActiveCell.Offset(0, 1) = txtPhone.Value
    ActiveCell.Offset(0, 2) = cboDepartment.Value
    ActiveCell.Offset(0, 3) = cboCourse.Value
    If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro"
    [B]ElseIf optIntermediate = True Then[/B]
            ActiveCell.Offset(0, 4).Value = "Intermd"
                Else
                ActiveCell.Offset(0, 4).Value = "Adv"
                End If
                If chkLunch = True Then
                    ActiveCell.Offset(0, 5).Value = "Yes"
                Else
                    ActiveCell.Offset(0, 5).Value = "No"
                End If
                If chkVegetarian = True Then
                ActiveCell.Offset(0, 6).Value = "Yes"
                Else
                    If chkLunch = False Then
                    ActiveCell.Offset(0, 6).Value = ""
                    Else
                    ActiveCell.Offset(0, 6).Value = "No"
                End If
                Range("A1").Select

The bolded text is what the editor highlights. What am I going wrong?

Last used cell?

Press Ctrl+End to move to what Excel thinks is the last used cell.

  • #2

This a complete If statement.

Code:

If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro"

Anything after it isn’t part of the If statement.

Try this.

Code:

If optIntroduction = True Then 
       ActiveCell.Offset(0, 4).Value = "Intro"
ElseIf  optIntermediate = True Then
       ActiveCell.Offset(0, 4).Value = "Intermd"
Else
       ActiveCell.Offset(0, 4).Value = "Adv"
End If

  • #3

Thanks Norie!

However, now I’m getting a different error: Block If without End If. The new code I’m trying is…

Code:

Private Sub cmdOK_Click()
    ActiveWorkbook.Sheets("Course Bookings").ActivateRange("A1").Select
Do
If IsEmpty(ActiveCell) = False Then
    ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
    ActiveCell.Value = txtName.Value
    ActiveCell.Offset(0, 1) = txtPhone.Value
    ActiveCell.Offset(0, 2) = cboDepartment.Value
    ActiveCell.Offset(0, 3) = cboCourse.Value
If optIntroduction = True Then
       ActiveCell.Offset(0, 4).Value = "Intro"
ElseIf optIntermediate = True Then
       ActiveCell.Offset(0, 4).Value = "Intermd"
Else
       ActiveCell.Offset(0, 4).Value = "Adv"
End If
    If chkLunch = True Then
        ActiveCell.Offset(0, 5).Value = "Yes"
    Else
        ActiveCell.Offset(0, 5).Value = "No"
    End If
    If chkVegetarian = True Then
        ActiveCell.Offset(0, 6).Value = "Yes"
    Else
    If chkLunch = False Then
        ActiveCell.Offset(0, 6).Value = ""
    Else
        ActiveCell.Offset(0, 6).Value = "No"
    End If
        Range("A1").Select
[B]End Sub[/B]

It now highlights «End Sub.»

Sorry completely new at vba trying to debug code I got from someone.

  • #4

Proper indentation of code will help discover these issues.
You were missing the Red End If

Rich (BB code):

Private Sub cmdOK_Click()
ActiveWorkbook.Sheets("Course Bookings").ActivateRange("A1").Select
Do
    If IsEmpty(ActiveCell) = False Then
        ActiveCell.Offset(1, 0).Select
    End If
Loop Until IsEmpty(ActiveCell) = True
 
ActiveCell.Value = txtName.Value
ActiveCell.Offset(0, 1) = txtPhone.Value
ActiveCell.Offset(0, 2) = cboDepartment.Value
ActiveCell.Offset(0, 3) = cboCourse.Value
 
If optIntroduction = True Then
    ActiveCell.Offset(0, 4).Value = "Intro"
ElseIf optIntermediate = True Then
    ActiveCell.Offset(0, 4).Value = "Intermd"
Else
    ActiveCell.Offset(0, 4).Value = "Adv"
End If
 
If chkLunch = True Then
    ActiveCell.Offset(0, 5).Value = "Yes"
Else
    ActiveCell.Offset(0, 5).Value = "No"
End If
 
If chkVegetarian = True Then
    ActiveCell.Offset(0, 6).Value = "Yes"
Else
    If chkLunch = False Then
        ActiveCell.Offset(0, 6).Value = ""
    Else
        ActiveCell.Offset(0, 6).Value = "No"
    End If
End If
Range("A1").Select
End Sub

  • #5

Thanks Jonmo1,

No longer coming up with that error.. But now it is coming with ‘Runtime erorr 9 subscript out of range’

  • #6

Where is that error happening?

  • #7

Don’t worry, fixed it!

I changed

Code:

ActiveWorkbook.Sheets("Course Bookings").ActivateRange("A1").Select

to..

Code:

    Application.Goto (ActiveWorkbook.Sheets("Course Bookings").Range("A1"))

The whole code is now..

Code:

Private Sub cmdOK_Click()
    'ActiveWorkbook.Sheets("Course Bookings").ActivateRange("A1").Select
    Application.Goto (ActiveWorkbook.Sheets("Course Bookings").Range("A1"))
Do
If IsEmpty(ActiveCell) = False Then
    ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
    ActiveCell.Value = txtName.Value
    ActiveCell.Offset(0, 1) = txtPhone.Value
    ActiveCell.Offset(0, 2) = cboDepartment.Value
    ActiveCell.Offset(0, 3) = cboCourse.Value
If optIntroduction = True Then
       ActiveCell.Offset(0, 4).Value = "Intro"
ElseIf optIntermediate = True Then
       ActiveCell.Offset(0, 4).Value = "Intermd"
Else
       ActiveCell.Offset(0, 4).Value = "Adv"
End If
    If chkLunch = True Then
        ActiveCell.Offset(0, 5).Value = "Yes"
    Else
        ActiveCell.Offset(0, 5).Value = "No"
    End If
    If chkVegetarian = True Then
        ActiveCell.Offset(0, 6).Value = "Yes"
    Else
    If chkLunch = False Then
        ActiveCell.Offset(0, 6).Value = ""
    Else
        ActiveCell.Offset(0, 6).Value = "No"
    End If
        Range("A1").Select
    End If
End Sub

Cheers for your help

Содержание

  1. Thread: Else without If statement compiling error
  2. Else without If statement compiling error
  3. Else without if ошибка vba
  4. Канал в Telegram
  5. Вы здесь
  6. Работа с условием If в VBA
  7. «else without if» получает эту ошибку в excel vba
  8. 2 Ответа
  9. TL;DR: вам нужно переместить все после Then в новую строку.
  10. Похожие вопросы:
  11. Else without if ошибка vba
  12. Example 1: If statement without a corresponding “End If” statement
  13. Example 2: Incorrect sequence of End If and Next statements
  14. Example 3: With statement has a corresponding End With Statement missing
  15. Example 4: Overlapping For and If Else statement
  16. Avoiding the Next without For error by using standard coding practices
  17. Решения, условия, алгоритмы if, then, switch в VBA Excel
  18. If. Then — Если То
  19. Синтаксис
  20. Диаграмма потока
  21. пример
  22. if..else заявление
  23. Синтаксис
  24. Диаграмма потока
  25. пример
  26. if . elseif..else statement
  27. Синтаксис
  28. Диаграмма потока
  29. пример
  30. вложенные операторы if
  31. Синтаксис
  32. пример
  33. инструкция switch
  34. Синтаксис
  35. пример
  36. VBA-Урок 7.1. Условия (Conditions)
  37. ElseIf
  38. Select

Thread: Else without If statement compiling error

Thread Tools
Display

Else without If statement compiling error

Hi there, I’m trying to debug some code I got from someone and I cannot seem to find the error in this If statement. Would appreciate any help!

code it like this:

PLS DO NOT PM; OPEN A THREAD INSTEAD.

1) Posting Code
[CODE]PasteYourCodeHere[/CODE]
(or paste your code, select it, click # button)

2) Uploading File(s)
Go Advanced / Attachments — Manage Attachments / Add Files / Select Files / Select the file(s) (multiple files can be selected while holding Ctrl key) / Upload Files / Done
Replace company specific / sensitive / confidential data. Include so many rows and sheets etc in the uploaded workbook to enable the helpers visualize the data and table structure. Helpers do not need the entire workbook.

3) Testing the Codes
always back up your files before testing the codes.

4) Marking the Thread as Solved
from Thread Tools (on the top right corner, above the first message)

i’m not sure understand the conditions but it can be something like this.

PLS DO NOT PM; OPEN A THREAD INSTEAD.

1) Posting Code
[CODE]PasteYourCodeHere[/CODE]
(or paste your code, select it, click # button)

2) Uploading File(s)
Go Advanced / Attachments — Manage Attachments / Add Files / Select Files / Select the file(s) (multiple files can be selected while holding Ctrl key) / Upload Files / Done
Replace company specific / sensitive / confidential data. Include so many rows and sheets etc in the uploaded workbook to enable the helpers visualize the data and table structure. Helpers do not need the entire workbook.

3) Testing the Codes
always back up your files before testing the codes.

4) Marking the Thread as Solved
from Thread Tools (on the top right corner, above the first message)

Источник

Else without if ошибка vba

Канал в Telegram

Вы здесь

Работа с условием If в VBA

Условный оператор IF является основной частью любого языка программирования. Без него не обойтись при написании даже небольшой программы, в которой необходимо принять некоторое решение. Синтаксис конструкции If следующий:

If условие Then [Команда 1] [Else Команда 2]

Если перевести, то получается: Если условие Тогда Команда 1 Иначе Команда 2

Т.е. если условие истинно тогда выполняется некоторая Команда (Команды) иначе выполняются другие Команды.В этом варианте конструкции IF будет выполнено только одна Команда. Else можно пропустить.

Примечание: При такой форме условия в Visual Basic после ключевого слова Then обязательно должна идти команда, а так же слова Then и Else должны находиться на той же строке что и IF, иначе интерпретатор выдаст ошибку. Если для удобства восприятия необходимо Команду 1 перенести на новую строку, то необходимо воспользоваться символом «_» после Then.

If условие Then _
[Команда 1] _
[Else Команда 2]

При таком варианте использования условия будет выполнено только одно действие. Если необходимо выполнить множество действий после Then или Else, то воспользуйтесь следующим вариантом написания условия:

If условие Then
[Команда 1]
[Команда 2]
.
[Else]
[Команда 3]
[Команда 4]
End If

Ключевое слово Else можно так же, как и в первом варианте не использовать, если нет необходимости.

И третий вариант конструкции, при котором происходит проверка условия, если первое условие не выполнено

If условие 1 Then
[Команда 1]
[Команда 2]
.
[ElseIf условие 2 Then
[Команда 3]
[Команда 4]
[Else
[Команда 5]
[Команда 6]
End If

В условиях также можно использовать логическое И (And), ИЛИ(Or) и отрицание НЕ (Not).
Рассмотрим несколько примеров использования выше перечисленных конструкций.

Пример 1

If a=b Then msgbox «а равняется b» Else msgbox «а не равно b»

Пример 2

В этом варианте Else не используем.
If a=b Then msgbox «а равняется b»

Пример 3

Используя «_» для интерпретатора Basic такая запись равносильна записи в Примере 1
If a=b Then _
msgbox «а равняется b» _
Else msgbox «а не равно b»

Пример 4
If a=b Then
msgbox «а равняется b»
a = a+b
Else
msgbox «а неравно b»
c = b
End If

Пример 5
If a=b Then
msgbox «а равняется b»
ElseIf a>b Then
msgbox «а больше b»
Else
msgbox «b больше a»
End If

«else without if» получает эту ошибку в excel vba

Я получаю ошибку «else without if» в коде ниже. Может кто-нибудь помочь?

2 Ответа

TL;DR: вам нужно переместить все после Then в новую строку.

В VBA однострочные- If — операторы имеют следующие характеристики:

  • У них нет End If , никогда .
  • Они должны быть написаны полностью , как одна строка. Один

Однако однострочный символ- if следует использовать исключительно для коротких утверждений. Как правило, не очень хорошая идея использовать его, когда у вас есть Else (не говоря уже о Else If ). Итак, в приведенном выше блоке кода второй и третий примеры не рекомендуются. Вместо этого вы должны написать свои If заявления следующим образом:

1 Вы можете, конечно, разбить операторы на несколько строк, используя _ , хотя. Смотрите это для получения дополнительной информации.

в логическое выражение, которое вы хотите использовать AND вместо &

кроме того, в таком запутанном случае блок Select Case гораздо более удобочитаем:

а вот еще один способ перевода того же самого If Then Else If вашего блока в Select Case :

Похожие вопросы:

Я не могу понять, почему VBA кричит на меня по этому поводу. Очень простой код, задействован только один оператор if, и он явно имеет Starting If и соответствующий конец If. Я являюсь разработчиком.

До сих пор никто solution не исправляет мою ошибку, какие-нибудь советы? Я отлаживаю макрос в VBA и получаю эту ошибку: Compile error: Else without If Любые советы о том, как это исправить? Вот.

Как вы обычно используете для замены if-without-else в Scala функциональным способом? Например, как этот типичный шаблон в императивном стиле: var list = List(a, b, c) if (flag) 0 ? days + ‘ day’ + (days > 1 ? ‘s’ : ») + ‘ ‘ : ») + hours+’:’+minutes+’:’+Math.round(seconds) Это моя.

У меня есть эта формула Excel ниже; DATE(LEFT(A1,3),MID(A1,6,1),MID(A1,7,1)) Я хотел бы преобразовать эту формулу Excel в пользовательскую функцию VBA. Public Function getDate(input_date As String).

Это мой первый проект vba, поэтому, пожалуйста, наберитесь терпения. Я создал форму пользователя Excel для добавления информации в базу данных. Когда я нажимаю add, у меня есть vba скрипт, который.

Я хочу написать формулу в excel. Я хочу реализовать ниже в excel if(C10 != SA) else else > > else .

Я запутался в том, как передать эту проблему с excel на VBA: В excel: Теоретик: =IF(cond1, IF(cond2, statement1,statement2),IF(cond2,statement3,statement4)) Фактические excel ячейки.

Else without if ошибка vba

“Next Without For” Compile Error is a very common compile-time error in Excel VBA. It implies that a Next statement must always have a preceding For statement that matches. If a Next statement is used without a corresponding For statement, this error is generated.

Let us look at some most common causes of the error and way to fix and avoid them.

Example 1: If statement without a corresponding “End If” statement

Every If statement (and If Else Statement) must have a corresponding End If statement along with it. As you can see in the above code, End If is missing after the Else block, causing the error. The right way to do it is

Example 2: Incorrect sequence of End If and Next statements

Here, the End If statement is not placed correctly causing overlapping as shown below:

For
If
Next
End If

The entire If statement (including, If, Else and End If statements), must be placed withing the For…Next block as shown below

Example 3: With statement has a corresponding End With Statement missing

Just like an If statement, the With statement should also have a corresponding End With statement, without which error will be thrown. The working example:

Example 4: Overlapping For and If Else statement

Say, in the example below, you want to do some processing only if a condition is false. Else you want to continue with the next counter of the For loop

Note: as in other programming languages, VBA does not have a continue option for a loop. When the control of the program reaches the first “Next counter” statement after the If statement — it finds that there is a Next statement within the If statement. However, there is no corresponding For statement within this If Block. Hence, the error.

So, you can use one of the two solutions below:

Simply remove the “next” statement after If

Not the if condition and place your code there. Else condition is not required at all

The bottom line is that the “If, Else, End If statement block” must be completely within the For loop.

Avoiding the Next without For error by using standard coding practices

The best way to avoid this error is to follow some standard practices while coding.

1. Code indentation: Indenting your code not only makes it more readable, but it helps you identify if a loop / if statement / with statement are not closed properly or if they are overlapping. Each of your If statements should align with an End If, each For statement with a Next, each With statement with an End With and each Select statement with an End Select

2. Use variable name with Next: Though the loop variable name is not needed with a next statement, it is a good practice to mention it with the Next statement.

This is particularly useful when you have a large number of nested for Loops.

3. As soon as you start a loop, write the corresponding end statement immediately. After that you can code the remaining statements within these two start and end statements (after increasing the indentation by one level).

If you follow these best practices, it is possible to completely and very easily avoid this error in most cases.

Решения, условия, алгоритмы if, then, switch в VBA Excel

Принятие решений позволяет программистам контролировать поток выполнения сценария или одного из его разделов. Исполнение управляется одним или несколькими условными операторами.

Ниже приведен общий вид типичной структуры принятия решений, найденной на большинстве языков программирования.

VBA предоставляет следующие типы решений. Нажмите следующие ссылки, чтобы проверить их данные.

If. Then — Если То

Оператор If состоит из логического выражения, за которым следуют одно или несколько операторов. Если условие называется Истинным, выполняются утверждения в условии If (s). Если условие называется False, выполняются инструкции после цикла If.

Синтаксис

Ниже приведен синтаксис оператора If в VBScript.

Диаграмма потока

пример

Для демонстрационной цели давайте найдем самую большую из двух чисел Excel с помощью функции.

Когда приведенный выше код выполняется, он производит следующий результат.

X is Greater than Y

Если заявление состоит из логического выражения следует один или более операторов.

if..else заявление

Оператор If состоит из логического выражения, за которым следуют одно или несколько операторов. Если условие называется Истинным, выполняются утверждения в условии If (s). Если условие называется False, выполняются утверждения в разделе Else Part.

Синтаксис

Ниже приведен синтаксис оператора If Else в VBScript.

Диаграмма потока

пример

Для демонстрационной цели давайте найдем самую большую из двух чисел Excel с помощью функции.

Когда приведенный выше код выполняется, он производит следующий результат.

Y is Greater than X

Если иное утверждение состоит из логического выражения следует один или более операторов. Если условие равно True, выполняются инструкции в операторах If . Если условие ложно, выполняется Else часть скрипта.

if . elseif..else statement

Оператор If, за которым следует один или несколько инструкций ElseIf, которые состоят из булевых выражений, а затем следуют инструкции else по умолчанию, которая выполняется, когда все условие становится ложным.

Синтаксис

Ниже приведен синтаксис оператора If Elseif-Else в VBScript.

Диаграмма потока

пример

Для демонстрационной цели давайте найдем самую большую из двух чисел Excel с помощью функции.

Когда приведенный выше код выполняется, он производит следующий результат.

X and Y are EQUAL

Если заявление следует один или более ELSEIF заявления, который состоит из логических выражений , а затем с последующим необязательным еще заявлением , которое выполняется , когда все условия становятся ложными.

вложенные операторы if

Оператор If или ElseIf внутри другого оператора If или ElseIf. Внутренние операторы If выполняются на основе внешних операторов If. Это позволяет VBScript легко справляться с сложными условиями.

Синтаксис

Ниже приведен синтаксис инструкции Nested If в VBScript.

пример

Для демонстрационной цели найдем тип положительного числа с помощью функции.

Когда приведенный выше код выполняется, он производит следующий результат.

The Number is a POSITIVE Number The Number is NOT 0,1,2 or 3

Если или ElseIf заявление внутри другого, если или ELSEIF заявление.

инструкция switch

Когда пользователь хочет выполнить группу операторов в зависимости от значения выражения, используется случай переключения. Каждое значение называется случаем, и переменная включается в зависимости от каждого случая. Оператор Case Else выполняется, если тестовое выражение не соответствует ни одному из случаев, указанным пользователем.

Case Else — необязательный оператор в Select Case, однако для хорошей практики программирования всегда есть оператор Case Else.

Синтаксис

Ниже приведен синтаксис оператора Switch в VBScript.

пример

Для демонстрационной цели найдем тип целого с помощью функции.

Когда приведенный выше код выполняется, он производит следующий результат.

The Number is the Least Composite Number

Переключатель заявление позволяет переменной быть проверены на равенство в отношении списка значений.

VBA-Урок 7.1. Условия (Conditions)

Условия являются очень полезными при программировании, поскольку позволяют нам выполнять действия, в зависимости от установленных критериев (используется такой же принцип как и в IF функции Excel).

Наиболее важной функцией, которая задает условие является IF и сейчас мы посмотрим, как она работает:

Давайте перейдем к практике и вернемся к примеру, который мы использовали в уроке с переменными. Цель этой процедуры была в том, чтобы открыть диалоговое окно, которое бы содержало значение из строки, указанного в ячейке F5 :

Если вы введете букву в ячейку F5 , это повлечет ошибку. Мы хотим предотвратить это.

Давайте добавим условие, которое будет проверять — является ли введенное значение в ячейку F5 числом, перед тем, как код будет выполнен.

Мы воспользуемся функцией IsNumeric для проверки условия:

Нам также нужно прописать инструкции, если поставленное нами условие не выполнится:

Теперь нечисловое значения не повлечет никаких проблем.

Работая с нашим массивом, который содержит 16 строк данных, наш следующий шаг будет в проверке является ли переменная row_number: «больше чем или равно 2» и «меньше чем или равно 17».

Но сначала взглянем на операторы сравнения:

и эти полезные операторы:

Теперь давайте добавим одно из выше указанных условий AND между операторов сравнения:

Если мы хотим сделать наш макрос более практичным, мы можем заменить 17 на переменную, которая бы содержала количество строк. Это бы позволило нам добавлять и удалять строки из массива без необходимости изменять этот лимит каждый раз.

Для того, чтобы сделать это, мы должны создать переменную nb_rows и добавить эту функцию.

В этом случае, мы используем функцию WorksheetFunction.CountA , которая является аналогом функции COUNTA в самом Excel.

Мы хотим, чтобы эта функция подсчитала количество непустых ячеек в первой колонке по записала полученное значение в переменную nb_rows:

ElseIf

ElseIf дает возможность добавлять дополнительные условия после IF команды:

Если УСЛОВИЕ 1 выполняется, Инструкция 1 будет выполнена и покинет оператор IF (который начинается с IF и заканчивается End If ). Если УСЛОВИЕ 2 принимает значение » ложь «, тогда будет выполнена Инструкция 2 , и если она в свою очередь возвращает » ложь «, тогда Инструкция 3 (под Else ) будет выполнена.

Далее есть пример с оценками от 1 до 6 в ячейке A1 и комментарием к этим оценкам в ячейке B1:

Select

Существует альтернатива использованию If со многими ElseIf инструкциями, а именно команда Select , которая больше подходит к такого рода ситуаций.

Рассмотрим пример макроса с оператором Select:

Стоит отметить, что мы также могли использовать и другие операторы сравнения:

Источник

ImyaMo

0 / 0 / 0

Регистрация: 13.09.2019

Сообщений: 24

1

13.09.2019, 04:07. Показов 3186. Ответов 7

Метки нет (Все метки)


нужно написать макрос в Excel для подсчета количества пенсионеров определенного возраста и подсчета сколько из них женщин, и сколько мужчин (за пенсионеров считать женщин старше 60 лет и мужчин старше 65 лет)
Хотела чтобы проходил по каждой строчке возраста, а затем проверял пол, но что-то пошло не по плану

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Public Sub individual_zadanie()
Dim k As Integer 'пенсионеры определенного возраста
Dim k1 As Integer 'мужчины
Dim k2 As Integer 'женщины
Dim a As Integer
Dim iCell As Range
k1 = 0
k2 = 0
k = 0
Set iCell = Columns(5).Find(What:="*", LookIn:=xlFormulas, SearchDirection:=xlPrevious)
If Not iCell Is Nothing Then
MsgBox "Количество людей в базе: " & iCell.Row, , ""
Else
MsgBox "Людей в базе нет", vbExclamation, ""
End If
a = CDbl(InputBox("Введите возраст: "))
For i = 1 To iCell.Row
If (iCell.Value = a And a >= 60 And Columns(4) = "ж") Then k2 = k2 + 1
ElseIf (iCell.Value = a And a >= 65 And Columns(4) = "м") Then k1 = k1 + 1
Else: MsgBox "Не пенсионер!"
End If
 
Next i
k = k1 + k2
MsgBox "Женщин:" & k2
MsgBox "Мужчин:" & k1
MsgBox "Всего пенсионеров этого возраста:" & k
End Sub

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



SoftIce

es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

13.09.2019, 04:39

2

Цитата
Сообщение от ImyaMo
Посмотреть сообщение

Visual Basic
1
2
3
4
If (iCell.Value = a And a >= 60 And Columns(4) = "ж") Then k2 = k2 + 1
ElseIf (iCell.Value = a And a >= 65 And Columns(4) = "м") Then k1 = k1 + 1
Else: MsgBox "Не пенсионер!"
End If
Visual Basic
1
2
3
4
5
6
7
If (iCell.Value = a And a >= 60 And Columns(4) = "ж") Then 
    k2 = k2 + 1
ElseIf (iCell.Value = a And a >= 65 And Columns(4) = "м") Then 
    k1 = k1 + 1
Else
   MsgBox "Не пенсионер!"
End If

Но это не единственная ошибка.



0



0 / 0 / 0

Регистрация: 13.09.2019

Сообщений: 24

13.09.2019, 04:47

 [ТС]

3

то есть проблема в том, что я не нажала enter??

а где еще ошибки, просто я первый день с vba работаю



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

13.09.2019, 04:54

4

Цитата
Сообщение от ImyaMo
Посмотреть сообщение

то есть проблема в том, что я не нажала enter??

При чем тут Enter ? Посмотрите внимательно.

Цитата
Сообщение от ImyaMo
Посмотреть сообщение

а где еще ошибки,

Без файла — гадание на кофейной гуще.



0



6874 / 2806 / 533

Регистрация: 19.10.2012

Сообщений: 8,552

13.09.2019, 08:16

5

Если первый день — ещё не поздно разучиться всюду втуливать integer…
Заменяйте всюду на long, если это реальная рабочая задача. Ну а для преподов можно и так оставить, им вероятно так привычнее



0



0 / 0 / 0

Регистрация: 13.09.2019

Сообщений: 24

13.09.2019, 09:32

 [ТС]

6

SoftIce, а можно на электронную почту скинуть, а то сюда не хочет прикрепляться. А, и нужно прикрепить ж таблицу саму (поддерж.макросы)?



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

13.09.2019, 09:59

7

Цитата
Сообщение от ImyaMo
Посмотреть сообщение

на электронную почту скинуть, а то сюда не хочет прикрепляться

Можете прислать. Но лучше заархивируйте, и всё прикрепится.



0



SoftIce

es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

13.09.2019, 16:37

8

ImyaMo,

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Sub individual_zadanie()
    Dim k As Long 'всего в базе
    Dim k1 As Long  'мужчины
    Dim k2 As Long   'женщины
    Dim a As Long, iCell As Range, firstResult As String
m:  a = Val(InputBox("Введите возраст: ", , 65))
    If a < 60 Then GoTo m
    With Worksheets(1).Columns(5)
         Set iCell = .Find("*", LookIn:=xlValues)
         If Not iCell Is Nothing Then
             firstResult = iCell.Address
             Do
                k = k + 1
                If (iCell.Value = a) And (a >= 60) And (Cells(iCell.Row, 4) = "ж") Then
                   k2 = k2 + 1
                ElseIf (iCell.Value = a) And (a >= 65) And (Cells(iCell.Row, 4) = "м") Then
                   k1 = k1 + 1
                End If
                Set iCell = .FindNext(iCell)
                If iCell Is Nothing Then Exit Do
             Loop While iCell.Address <> firstResult
         End If
    End With
    If k > 0 Then If (k1 = 0 And k2 = 0) Then MsgBox "Пенсионеров " & a & "-летнего возраста в базе нет": Exit Sub
    MsgBox IIf(k = 0, "Людей в базе нет", "Количество людей в базе: " & k & vbCrLf & "Всего пенсионеров " & a & "-летнего возраста: " & k1 + k2 & vbCrLf & "Из них:" & vbCrLf & "Женщин: " & k2 & vbCrLf & "Мужчин: " & k1)
End Sub



0



  1. 04-11-2017, 07:18 AM


    #1

    VBA Compile Error «Else without if»

    Hi Guys,

    trying to make this thing work, but getting an error.
    Can you pls take a look?

    Sub Enter_Text()
    'Setting Variables
        Dim Rng As Range
        Dim WorkRng As Range
        Dim Txt As String
        Dim Location As String
        Dim Position As Integer
        Dim Msg As String
        On Error Resume Next
    
    
    'Defining Variables
    xTitleID = "Macro"
    
    
    Set WorkRng = Application.Selection
    Set WorkRng = Application.InputBox("Select a Range", xTitleID, WorkRng.Address, Type:=8)
    
    
    Txt = Application.Selection
    Txt = Application.InputBox("Enter Desired Text", xTitleID, Type:=2)
    
    
    Location = Application.Selection
    Location = Application.InputBox("Type whether you want to add text from LEFT or RIGHT", xTitleID, Type:=2)
    
    
    Position = Application.Selection
    Position = Application.InputBox("Enter Text position with amount of digits", xTitleID, Type:=1)
    
    
    Msg = MsgBox("Please check your criterias and Try Again", , xTitleID)
    
    
    'Setting Output
    
    
    If Location = "LEFT" Then
            For Each Rng In WorkRng
            Rng.Value = VBA.Left(Rng.Value, Postion) & Txt & Mid(Rng.Value, Len(Postion + 1), Len(Rng.Value) - Len(Postion))
            
    ElseIf Location = "RIGHT" Then
            For Each Rng In WorkRng
            Rng.Value = VBA.Left(Rng.Value, Len(Rng.Value) - Len(Right(Rng.Value, Position))) & Txt & Right(Rng.Value, Position)
    Else
        Msg
    End If
    Next
    End Sub


  2. 04-11-2017, 07:53 AM


    #2

    You need to add

    above the offending Else.

    Then the line «Msg» will error.


  3. 04-11-2017, 08:08 AM


    #3

    .
    .
    See if this works for you:

    Option Explicit
    
    
    Sub Enter_Text()
         'Setting Variables
        Dim Rng As Range
        Dim WorkRng As Range
        Dim Txt As String
        Dim Location As String
        Dim Position As Integer
        Dim Msg As String
        Dim xTitleID As String
        'On Error Resume Next
         
         
         'Defining Variables
        xTitleID = "Macro"
         
         
        Set WorkRng = Application.Selection
        Set WorkRng = Application.InputBox("Select a Range", xTitleID, WorkRng.Address, Type:=8)
         
         
        Txt = Application.Selection
        Txt = Application.InputBox("Enter Desired Text", xTitleID, Type:=2)
         
         
        Location = Application.Selection
        Location = Application.InputBox("Type whether you want to add text from LEFT or RIGHT", xTitleID, Type:=2)
         
         
        Position = Application.Selection
        Position = Application.InputBox("Enter Text position with amount of digits", xTitleID, Type:=1)
         
         
        Msg = MsgBox("Please check your criterias and Try Again", , xTitleID)
         
         
         'Setting Output
         
         
        If Location = "LEFT" Then
            For Each Rng In WorkRng
                Rng.Value = VBA.Left(Rng.Value, Position) & Txt & Mid(Rng.Value, Len(Position) + 1, Len(Rng.Value) - Len(Position))
            Next
        End If
        If Location = "RIGHT" Then
                For Each Rng In WorkRng
                    Rng.Value = VBA.Left(Rng.Value, Len(Rng.Value) - Len(Right(Rng.Value, Position))) & Txt & Right(Rng.Value, Position)
                Next
        End If
    End Sub

  4. 04-12-2017, 01:38 AM


    #4

    Thank You Logit!

    works perfectly now!


  5. 04-12-2017, 07:47 AM


    #5

    You are welcome. Thank you !

    Cheers


  1. 07-25-2020, 07:03 AM


    #1

    lydra4 is offline


    Registered User


    Compile error:Else Without If

    Hi,

    I am facing this Compile error:Else Without If for my VBA code. Any help would be appreciated,

    underline is where the error occurs, below is my code:

    Last edited by alansidman; 07-25-2020 at 08:35 AM.


  2. 07-25-2020, 07:27 AM


    #2

    Re: Compile error:Else Without If

    big yellow banner — upload workbook — save crystal ball gazing.
    and while doing that look at rules about enclosing code within code tags.
    just friendly advice before moderators slap your knuckles…


  3. 07-25-2020, 07:42 AM


    #3

    Re: Compile error:Else Without If

    It looks like you are missing an END WITH.


  4. 07-25-2020, 08:35 AM


    #4

    Re: Compile error:Else Without If

    Code Tags Added
    Your post does not comply with Rule 2 of our Forum RULES. Use code tags around code.

    Posting code between

    [CODE]Please [url=https://www.excelforum.com/login.php]Login or Register [/url] to view this content.[/CODE] tags makes your code much easier to read and copy for testing, it also maintains VBA formatting.

    Highlight your code and click the # icon at the top of your post window. More information about these and other tags can be found at http://www.excelforum.com/forum-rule…rum-rules.html

    (I have added them for you today. Please take a few minutes to read all Forum Rules and comply in the future.)


  5. 07-26-2020, 01:40 AM


    #5

    lydra4 is offline


    Registered User


    Re: Compile error:Else Without If


  6. 07-26-2020, 01:42 AM


    #6

    lydra4 is offline


    Registered User


    Re: Compile error:Else Without If

    Hi,

    I have included an END WITH, however the code still results in the same error. Below is my code:

    Thank you.


  7. 07-26-2020, 02:09 AM


    #7

    Re: Compile error:Else Without If

    The first ‘For’ statment does not appear to have a ‘Next’ associated with it.
    However there does not seem to be any actions triggered by this ‘For’ statement before you hit the next ‘For’ statement.
    i.e. remove the first ‘For’ statement line and see what happens.
    torachan.


Понравилась статья? Поделить с друзьями:
  • Compile error cannot define scripted plugin class
  • Compile error byref argument type mismatch
  • Compile error block if without end if
  • Compile error argument not optional vba
  • Compile error ambiguous name detected