Как вы делаете это остальное, если? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь проверить диапазон для других значений, а затем изменить значение в другом столбце, но каждый раз, когда я делаю это, появляется сообщение об ошибке:

Иначе без If

For i = 1 To 3000
    With Sheets("Order Approvers")
      If .Range("C" & i).Value = "No Approval Required" Then _
        .Range("F" & i).Value = ""
      'Else <<< illegal here??
    End With
Next i

Ответы [ 4 ]

0 голосов
/ 21 января 2019

Вы использовали символ продолжения строки _ в конце вашего оператора if. Это склеивает следующее утверждение непосредственно в If -общение. В основном это означает то же самое, что и написание

If .Range("C" & i).Value = "No Approval Required" Then .Range("F" & i).Value = ""

Когда у вас написано такое заявление, вы не можете использовать Else (технически, вы можете, но вы должны поместить это также в ту же строку, и это то, что вы не хотите ...)

Вы можете использовать ElseIf, если у вас есть другое условие для проверки, Else для всех остальных случаев. В конце нужно поставить End If Итак, просто напишите

If .Range("C" & i).Value = "No Approval Required" Then 
    .Range("F" & i).Value = ""
ElseIf (...) Then
    .Range("F" & i).Value = "whatever"
Else
    .Range("F" & i).Value = "something else"
End If
0 голосов
/ 21 января 2019

Объяснение


Вы можете использовать оператор IF в одной из двух синтаксических структур:

Одна строка:

If [this] Then [That]

Многострочный:

If [This] Then
    [That]
End If

Многострочный позволяет проверить несколько операторов If или использовать ElseIf.Обратите внимание, что это не может быть сделано в однолинейной версии:

If [This(1)] Then
    [That1] 
  ElseIf [This(2)] Then
    [That2] 
  ElseIf
    [That3]
End If

Реализация


Вы можете превратить ваш оператор IF водин лайнер, как это:

For i = 1 To 3000
    With Sheets("Order Approvers")
      If .Range("C" & i).Value = "No Approval Required" Then .Range("F" & i).Value = ""
    End With
Next i

Или вы можете использовать блочную версию следующим образом:

For i = 1 To 3000
    With Sheets("Order Approvers")
      If .Range("C" & i).Value = "No Approval Required" Then 
        .Range("F" & i).Value = ""
      End If
    End With
Next i

Или вы можете обновить, чтобы использовать оператор Else

For i = 1 To 3000
    With Sheets("Order Approvers")
        If .Range("C" & i).Value = "No Approval Required" Then 
          .Range("F" & i).Value = ""
        ElseIf [What?] Then
            'Do what?
        End If
    End With
Next i
0 голосов
/ 21 января 2019

Это подчеркивание вводит в заблуждение:

  If .Range("C" & i).Value = "No Approval Required" Then _
    .Range("F" & i).Value = ""

Это выглядит как If...Then...End If блочный синтаксис, но это не так.Продолжение строки _ делает строку логического кода фактически такой:

  If .Range("C" & i).Value = "No Approval Required" Then .Range("F" & i).Value = ""

И это совершенно законно.

Вы можете продолжить ту же логическую строкукода с выражением Else:

  If .Range("C" & i).Value = "No Approval Required" Then .Range("F" & i).Value = "" Else ...

И это все равно будет законным.

Однако, что вы не можете сделать, это:

  If .Range("C" & i).Value = "No Approval Required" Then .Range("F" & i).Value = ""
  Else ....

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

Если вы хотите использовать оператор Else в отдельной строке кода, то вам нужнопереключиться на блочный синтаксис - это означает, что ключевое слово Then находится там, где заканчивается оператор If:

  If .Range("C" & i).Value = "No Approval Required" Then 
       .Range("F" & i).Value = ""
  Else
      '....
  End If
0 голосов
/ 21 января 2019

Вам необходимо закрыть заявление If с помощью End If.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...