Как использовать оператор Select с массивом опций - PullRequest
1 голос
/ 27 марта 2019

Я хочу удаленно / многократно использовать многозначное выражение оператора Case ExpressionList .

Есть ли способ передать удаленный список в Case (массив был моимтолько мысль).

Это нормально:

Select Case(LCase(strProduce))
    Case "apple", "pear", "banana"
        'Do Frutie stuff
    Case "corn", "care-rot", "radish"
        'Do Vegitapole stuff (get the spelling reference?)
End Case

Но эти списки дел используются очень часто, и я хочу переместить их в центральное место.Поэтому я хочу что-то более похожее (и не нужно переделывать код в сотнях мест).

aryFruit = Array("apple", "pear", "banana", "grape")
aryVegetable = Array("corn", "carrot", "radish")

Select Case(LCase(strProduce))
    Case In aryFruit
        'Do Fruit stuff
    Case In aryVegetable
        'Do Vegitapole stuff (get the spelling reference?)
End Case

Если бы дело было просто много одиночных дел, оно бы работало только с переменными, но мне нужно, чтобыбыть списком, так как сумма может измениться, как показано в приведенном выше примере «хотел» [виноград].Я пытаюсь сохранить существующие операторы Case и не преобразовывать их в множество циклов If s и For (случаев гораздо больше, чем двух).

1 Ответ

4 голосов
/ 27 марта 2019

Вы можете создать словарь, отображающий элементы в соответствующий тип

Set produce = CreateObject("Scripting.Dictionary")
produce.CompareMode = vbTextCompare

produce("apple")  = "fruit"
produce("pear")   = "fruit"
produce("banana") = "fruit"
produce("grape")  = "fruit"
produce("corn")   = "vegetable"
produce("carrot") = "vegetable"
produce("radish") = "vegetable"

, а затем выполнить простой поиск:

Select Case produce(strProduce)
    Case "fruit"
        'Do fruit stuff
    Case "vegetable"
        'Do vegetable stuff
End Case
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...