Есть малоизвестный факт (или, как мне нравится это называть, маленькая практическая шутка Microsoft ...) в vba , что If..Then..End If
условие имеет фактически две установленные формы:
- однострочный синтаксис
- многострочный синтаксис
Вы в основном смешали многострочный и однострочныйстроковый синтаксис в один муш , согласно MSDN :
Что следует за ключевым словом Then
, проверяется, чтобы определить, является ли оператор однострочнымIf
. Если после Then
в той же строке появляется что-то кроме комментария, оператор обрабатывается как однострочный оператор If. Если Then
отсутствует, он должен быть началом множественногоline If...Then...Else
.
Пример однострочного оператора:
If <condition> Then <expression>
и многострочного (что вы пытались сделать) :
If <condition> Then
<expression>
ElseIf <condition> Then 'optional, note comment isn't evaluated as single-line expression
<expression>
End If
Таким образом, чтобы подвести итог, ваш код выдал ошибку, потому что ElseIf
был оценен как <expression>
после оператора If..Then
вместо оценки вусловно, как вы и предполагали.
Неписанное правило гласит: всегда пишите в многострочном синтаксисе .
Не только вы избежите ненужных ошибок(как вы только что столкнулись), но также бесспорно легче читать и стандарт среди кодеров.
1054 *