Вызов функции Access VBA с оператором IF в качестве аргумента - PullRequest
2 голосов
/ 04 мая 2020

Предполагая, что у меня есть следующая функция MS Access 2016:

Public Function TestFunction(ByVal strTest As String) As String

Есть ли способ вызвать функцию с чем-то похожим на:

strReturn = TestFunction(If a = 1 Then "Apple" Else "Orange")

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

If a = 1 Then strArg = "Apple" Else strArg = Orange
strReturn = TestFunction(strArg)

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Вы можете выполнить sh, используя IIf, например:

strReturn = TestFunction(IIf(a=1,"Apple","Orange"))

Но это обычно не рекомендуется при работе с выражениями, отличными от констант, потому что IIf всегда будет оценивать оба аргумента then и else перед возвратом соответствующего значения в зависимости от результата выражения теста, которое иногда может привести к нежелательным результатам.

Например, вычисление следующего выражения в непосредственном окне ( Ctrl + G ) приведет к ошибке деления на ноль, даже если выражение else никогда не будет возвращено :

?iif(true,"Apple",1/0)
0 голосов
/ 04 мая 2020

Почему бы не что-то подобное для нескольких возможностей

Dim myArg as String

Select Case a
    Case 1: myArg = "Apple"
    Case 2: myArg = "Orange"
    Case 3: myArg = "Pear"
   'etc.
End Select

strReturn = TestFunction(myArg)
0 голосов
/ 04 мая 2020

Если значение для a поступает из четко определенного диапазона, то решением будет использовать либо Выбор Функция для непрерывного диапазона, либо Переключатель Функция для несмежного хорошо определенного range.

Конечно, более сложным решением было бы заменить оба типа «Выбрать» или «Переключить» на словарь.

...