Даже если полученное вами сообщение об ошибке «loop без do», на самом деле ошибка касается вашего оператора If, для которого требуется отдельная строка с End If
после команды, которую вы хотите выполнить в вашем If-заявление.
Если такие маркеры отсутствуют, вы часто получаете сообщение об ошибке, которое не отражает действительную ошибку, поэтому следите за этими отсутствующими конечными элементами (End If
, Next
, Loop
и т. Д.) При отладке!
В качестве дополнения ниже приводится обсуждение однострочной версии по сравнению с многострочной версией оператора If:
1)Если у вас есть только один оператор для выполнения, когда условие истинно:
- , вы можете использовать многострочную версию, для которой требуется
End If
в конце:
If Condition Then
Do_Something
End If
- вы можете использовать однострочную версию оператора If, для которого не требуется
End If
в конце:
If Condition Then Do_Something
Какой из них выбрать, это вопрос предпочтений.В случае выполнения только одного оператора может показаться целесообразным использовать версию в одну строку , поскольку она делает его аккуратным .
Однако multi-line версия остается более гибкой .Например, представьте себе, что в будущем вы понимаете, что вам нужно выражение If-Statement для выполнения большего количества операторов, вам придется переключиться обратно на многострочную версию *.Кроме того, для включения Else
или ElseIf
в ваш код для выполнения чего-либо, когда условие возвращает false, вам также понадобится многострочная версия ** ( Подробнее здесь ).
2) Если у вас есть несколько операторов для выполнения, когда условие выполняется:
- Вы должны использовать многострочную версию, например:
If Condition Then
Do_Something
Do_Another_Thing
End If
- Вы могли бы, но, вероятно, следует избегать для использования однострочной версии.Но если вы действительно хотите, вам придется использовать его в сочетании с двоеточием (:), чтобы разделить ваши утверждения следующим образом:
If Condition Then Do_Something: Do_Another_Thing
В этом случае причина, по которой яЯ говорю, что вам, вероятно, следует избегать использования однострочной версии, потому что она становится трудной для чтения , и не все знакомы с использованием двоеточия (:) для добавления более одного оператора к одномустрока ( Подробнее здесь )
Сноски:
*: Как объяснено в части 2, вам не нужно было бы переключаться абсолютно, но это было бынастоятельно рекомендуется.
**: На самом деле вы могли бы написать Else
в той же строке, используя
If Condition Then Do_Something Else Do_Something_Else
, но я бы не стал поощрять его для удобства чтения.