Блокировать, если без конца, если — ошибка VBA

#ms-access #vba #if-statement

#ms-access #vba #if-оператор

Вопрос:

Это небольшой фрагмент кода, который я пишу. Кажется, что в последней строке появляется ошибка «БЛОКИРОВАТЬ, ЕСЛИ БЕЗ КОНЦА, ЕСЛИ». Я не могу обнаружить ошибку здесь, после консультации с этой ссылкой MSDN

     If Longs > 10 amp; Shorts > 10 Then
                 If Longs < Shorts Then
                       Pairs = Longs
                 Else
                       Pairs = Shorts
                 End If
    Else
      If Longs < 10 amp; Shorts > 10 Then
                      Shortfall = True
                      Pairs = 10
     Else: Shortfall = False
                      Pairs = 10 
End If              
End Sub
  

Любая помощь будет высоко оценена

Комментарии:

1. скорее всего, это из-за того, что в строке Else: отсутствует End If , должно ли это быть Else: Shortfall = false: Pairs = 10: End If ?

2. Я всегда использую бесплатную надстройку под названием «Smart Indent», чтобы получить хороший отступ кода, когда я наследую какой-то визуально ужасный код, подобный вашему.

Ответ №1:

Измените свой

 Else
    If Longs < 10 amp; Shorts > 10 Then
  

Для

 ElseIf Longs < 10 amp; Shorts > 10 Then
  

Таким образом, вы не добавляете ненужные вложенные If конструкции, а просто добавляете дополнительное условие к своей внешней If конструкции.

Вот так:

 If Longs > 10 amp; Shorts > 10 Then
    If Longs < Shorts Then
        Pairs = Longs
    Else
        Pairs = Shorts
    End If
ElseIf Longs < 10 amp; Shorts > 10 Then
    Shortfall = True
    Pairs = 10
Else 
    Shortfall = False
    Pairs = 10 
End If              
  

Черт возьми, вы даже можете оставить это без изменений, хотя это довольно некрасиво:

 Else: Shortfall = False
                Pairs = 10 
  

Ответ №2:

У вас есть 3 If , но только 2 End If , измените End Sub в конце на End If .

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

 If Longs > 10 amp; Shorts > 10 Then
   If Longs < Shorts Then
      Pairs = Longs
   Else
      Pairs = Shorts
   End If
Else
   If Longs < 10 amp; Shorts > 10 Then
      Shortfall = True
      Pairs = 10
   Else 
      Shortfall = False
      Pairs = 10 
   End If              
' missing End If
End Sub
  

Комментарии:

1. Спасибо, это сработало. Я работал в терминах метода типа C, если [операторы if] иначе, если [операторы] … else [do the rest] Поэтому отдавал более высокий приоритет последнему, хотя на самом деле это вложенный Else.

Ответ №3:

Изменить
Else: Shortfall = False
в

 Else 
   Shortfall = False
   Pairs = 10
end if