Несколько истинных случаев в утверждении выбора случая - PullRequest
2 голосов
/ 29 марта 2019

Я хотел бы знать, как продолжить работу Select Case после того, как он встретит первое выражение, которое оценивается как true.В приведенном ниже примере будет отображаться только окно сообщения «Z меньше 9».Я хотел бы знать, как сделать так, чтобы код продолжался, чтобы в этом примере окно сообщения «Z меньше 10» отображалось после «Z меньше 9»

Sub SelectCaseTrying()
    Dim Z As Integer
    Z = 8
Select Case Z
    Case 5 To 9
        MsgBox "Z is less than 9"
    Case Is < 10
        MsgBox "Z is less than 10"
    Case Is > 15
        MsgBox "Z is greater than 15"
    Case Else
        MsgBox "Z is "
    End Select
End Sub

1 Ответ

2 голосов
/ 29 марта 2019

Я хотел бы знать, как продолжить работу Select Case после того, как он встретит первое выражение, которое оценивается как true.

Этого не может быть, потому что согласно спецификациям языка блоки Case не "проваливаются" в VBA, поэтому, если у вас было это:

Select Case Z
    Case Is < 15
        MsgBox "less than 15"
    Case Is < 10
        MsgBox "less than 10"
    Case Else
        MsgBox "greater than or equal to 10"
End Select

Тогда второй Case будет эвристически недоступен - и инструмент статического анализа кода, такой как Rubberduck (отказ от ответственности: я участвую в этом проекте с открытым исходным кодом), может предупредить об этом:

Rubberduck code inspections warning about unreachable Case clause

Думайте о Select...Case как о более чистом способе записи If...ElseIf...ElseIf...ElseIf...ElseIf... блоков: все условия должны быть взаимоисключающими, и должна выполняться только одна ветвь.

Если вам нужны два или более условных блока для запуска, вы не можете использовать Select...Case, потому что это не то, что делает If...ElseIf...ElseIf...: если вам нужны два или более условных блока для запуска, вам нужно два или более отдельных условные блоки (If...End If).

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