И / или комбинация в VBA
Я запутался в том, как "и" или "заявления" работают вместе. Я пытаюсь заставить оператор (что-то или что-то) работать как часть оператора 'и', но не могу понять логику. Проблема иллюстрируется следующими двумя блоками кода. Первый работает нормально.. второй завершается с ошибкой времени выполнения 438: "Объект не поддерживает это свойство или метод". Ошибка относится к строке "If j.Enabled...". На мой взгляд, оба должны работать.. Кто-нибудь может уточнить, почему это не так?
Кодовый блок 1 (работает)
Private Sub Fini_cbn_Click()
Dim j As Control
For Each j In Controls
If j.Enabled = True And j.Tag = "4" Then
If j.Value = "<NA>" Or j.Value = "" Then
j.BackColor = &HFFFF&
Else
j.BackColor = &H80000005
End If
End If
Next j
End Sub
Блок кода 2 (не работает)
Private Sub Fini_cbn_Click()
Dim j As Control
For Each j In Controls
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then
j.BackColor = &HFFFF&
Else
j.BackColor = &H80000005
End If
Next j
End Sub
2 ответа
VBA не закорачивает. Это означает, что все выражение оценивается каждый раз.
Так вот
If j.Enabled = True And j.Tag = "4" Then If j.Value = "<NA>" Or j.Value = "" Then
j.Value
оценивается только если j.Enabled And j.Tag = "4"
и все хорошо.
Но здесь
If j.Enabled = True And j.Tag = "4" And (j.Value = "<NA>" Or j.Value = "") Then
Весь оператор оценивается "сразу". Итак, в вашей коллекции должен быть элемент управления, который не имеет Value
имущество. Поскольку свойство не существует, оно не может оценить утверждение.
Во второй версии полный оператор if выполняется для каждого элемента управления. Таким образом, если есть какие-либо элементы управления, которые не имеют свойства value, то часть "j.value" оператора if оценивается, но элемент управления не имеет свойства.
В первой версии, я предполагаю, что вы только установили тег и включили противоречия, которые имеют свойство "значение". Таким образом, свойство j.value никогда не пытается найти.