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).