Если текстовое сравнение не выполняется в Word VBA - PullRequest
0 голосов
/ 06 июня 2018

Я боролся с этим некоторое время, и я не понимаю, почему оператор if возвращает истину, когда одно из операторов AND явно ложно.

strtmp = TypeName(ctl) 'Take for instance (and have verified) this returns String type with the value of Label. However the below is returning true in this case.
If (strtmp = "TextBox") And (arControlName(2) = "Desc") And Trim(Me.Controls(ctl.Name).Value & "") = "" Then
 'Do some stuff
End If

Моя проблема - перваяоператор if как-то приравнивается к истинному ИЛИ «И» не работает так, как я ожидаю: «И = ИСТИНА, если все условия имеют значение ИСТИНА. И = ЛОЖЬ, если любой изусловия ЛОЖНЫЕ. "ИЛИ Я использую это неправильно?

Возможно, я просто тоже теряю свои шарики:)

РЕДАКТИРОВАТЬ: если утверждения разбиты на 3 отдельных оператора If (как ниже),код работает как положено.

If (strtmp = "TextBox") Then
    If (arControlName(2) = "Desc") Then
        If Trim(Me.Controls(ctl.Name).Value & "") = "" Then
         ' Set the value and exit loop
        End If
    End If
End If

1 Ответ

0 голосов
/ 06 июня 2018

Благодаря комментариям, заставляющим мой мозг двигаться в другом направлении, я решил проблему.

По-видимому, это как-то связано с VBA, и ему не нравится выполнять определенные вызовы в операторе If. Кажется, что это нормально, если поместить TypeName(ctl) = "TextBox" в оператор if, но не вызов Me.Controls(ctl.Name).Value & "". * 1005.*

strctlTypeName = TypeName(ctl)
strctlVal = Trim(Me.Controls(ctl.Name).Value & "")
If ((strctlTypeName = "TextBox") And (arControlName(2) = "Desc")) And strctlVal = "" Then 'And (Trim(Me.Controls(ctl.Name).Value & "") = "") Then
 'Set the value and exit inner for loop
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...