Используя Access VBA, нам нужно сделать оператор IF-Than, но есть 16 значений. Итак, я попытался включить "ИЛИ", но этот код возвращает ошибку «Не могу найти поле" Я ", на которое ссылается выражение. Вот что у нас есть: Примечание: поля находятся в подчиненной форме f_SubReviewer:: If (Me! [F_SubReviewer]! [ReviewerComments] <> "" Или [Adj1] <> "") Чем ...
2 ответа
Это звучит так, как будто if
с 16 or
s - неправильный путь. С другой стороны, заявление case
кажется идеальным для этого.
Быстрый поиск показывает, что MS Access имеет оператор case со следующим синтаксисом:
Select Case test_expression Case condition_1 result_1 Case condition_2 result_2 ... Case condition_n result_n Case Else result_else End Select
Это приведет к более читаемому коду, который также может быть быстрее.
Пример использования switch и case против if (с использованием синтаксиса, подобного C, поскольку я знаю тот)
If( (A=1) | (A=2) | (A=3) ) { Do something } Else { Do something else } switch( A ) { case 1: {Do something} ; break case 2: case 3: {Do something} (A might be 2 or 3 since there was no break behind 2); break. Default: {Do something else} }
Похоже, вы пытаетесь проверить несколько полей / переменных, чтобы убедиться, что ни одно из них не является пустым или нулевым. В этом случае вы можете сделать целую кучу вложенных операторов if
/ elseif
, но это может быть ужасно быстро. Я бы предложил создать новую булеву переменную, такую как blnNoBlanks
, установить для нее значение true, а затем запустить отдельные операторы if
для каждого поля и установить для переменной значение false, если какое-либо из условий не выполняется. Как это:
Dim blnNoBlanks as boolean
blnNoBlanks = True
If (Me![f_SubReviewer]![ReviewerComments] = "" Then
blnNoBlanks = false
End If
If [Adj1] = "" Then
blnNoBlanks = false
End If
'... the rest of the IF statements
If blnNoBlanks Then
'Enter your new code here
End If
Если переменная blnNoBlanks
через перчатку IF
тогда все в порядке. Если нет, переменная будет ложной, и вы можете действовать соответственно. Даже лучше, чем в приведенном выше коде, было бы поместить все проверки в функцию и просто вызвать ее для присвоения вашей логической переменной. Это облегчит чтение кода и позволит вам снова вызывать эту функцию из других мест вашего кода.