Есть ли в VBA функция NotIn ("A", "B")? - PullRequest
1 голос
/ 22 сентября 2010

Я пишу функцию, которая требует ввода, и моя проверка данных выглядит очень неловко. Если InputFld не "A", "B" или "C", то это ошибка:

If InputFld <>"A" and InputFld<>"B" and InputFld<>"C" then goto ErrorHandler

Мне это просто кажется некрасивым. Есть ли более элегантное решение? Я хотел бы просто написать что-то вроде:

If InputFld not in ("A","B","C") then goto ErrorHandler

См? Гораздо проще читать и поддерживать таким образом. Но я не знаю, как это сделать.

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

Как насчет:

If Instr("ABC",InputFld)=0 Then
2 голосов
/ 22 сентября 2010

Как минимум два способа сделать это:

public function IsInSet(byval value as variant, paramarray theset() as variant) as boolean
  dim i as long 

  for i=lbound(theset) to ubound(theset)
    if value = theset(i) then
      isinset = true
      exit function
    end if
  next
end function

Использование: If not IsInSet(val, "A", "B", "C") then ...


public function IsInSet(byval value as variant, theset as variant) as boolean
  dim i as long 

  for i=lbound(theset) to ubound(theset)
    if value = theset(i) then
      isinset = true
      exit function
    end if
  next  
end function

Использование: If not IsInSet(val, array("A", "B", "C")) then ...

1 голос
/ 22 сентября 2010

Eval () должен позволить вам сделать нечто подобное. Это выражение возвращает -1 (True):

Debug.Print Eval("""g"" Not In (""a"",""b"",""c"")")

Я бы не назвал это элегантным.

Рассмотрите возможность использования оператора Like. Это выражение возвращает True:

Debug.Print Not "g" Like "[abc]"
...