Как использовать оператор if в аргументе Select case - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно использовать оператор select, но в то же время для одного из операторов case мне нужно использовать оператор if внутри него, потому что для него есть несколько падежей, и одно и то же действие будет выполняться для всех этих элементов. Я не могу понять это. По сути, мне нужно выполнить то же действие, если какой-либо элемент в массиве содержит «API» в виде текста.

У меня есть массив strARR, который имеет несколько значений.

Select Case (strARR)
 Case "UI"
    msgbox "I am UI"
Case "DB"
   msgbox "I am DB"
Case (if (instr(strARR,"API")>0))     'This is where I am getting issue
  msgbox "I am one of the API"
Case Else
  msgbox "I am nothing"
End Select

1 Ответ

3 голосов
/ 10 февраля 2020

strARR будучи массивом, вы не можете рассматривать его, как если бы он был одним из его элементов: массив - это массив, а не строка; Вы не можете сравнивать массив строк с другой строкой, а также не можете использовать строковые функции, такие как InStr, чтобы определить, содержит ли массив значение.

Используйте For...Next l oop для итерации массив, используя LBound и UBound, чтобы получить нижнюю и верхнюю границы массива (никогда не задавайте их жестко!), а затем используйте индексы массива для извлечения элемента с текущим индексом:

Dim i As Long
For i = LBound(strARR) To UBound(strARR)

    Dim element As String
    element = strARR(i)

    MsgBox ProcessElement(element)

Next

Теперь нам нужна функция ProcessElement, которая принимает аргумент String, выполняет свою функцию и возвращает String - проблема в том, что вы не можете иметь логическое выражение в операторе Case у вас есть это InStr условие, потому что разрешаемый здесь тип данных String; чтобы блок Case был действительным с логическим выражением, нам нужно, чтобы аргумент Select Case был Boolean ... и мы можем на самом деле сделать именно это:

Private Function ProcessElement(ByVal element As String) As String
    Select Case True
        Case element = "UI"
            ProcessElement = "I am UI"

        Case element = "DB"
            ProcessElement = "I am DB"

        Case InStr(element, "API") > 0
            ProcessElement = "I am one of the API"

        Case Else
            ProcessElement = "I am nothing"

    End Select
End Function

Примечание: вызов MsgBox внутри al oop - очень раздражающая идея. Попробуйте вместо этого использовать Debug.Print для вывода на немедленную панель (Ctrl + G).

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