2016-01-19 4 views
1

Я пытаюсь использовать логику «If» в Excel VBA, но сценарий всегда выбирает первый вариант для двух областей, даже если инструкция неверна.VBA Не распознавая условия оператора «If»

Пункт кода, если слово «Rate» отображается в одном месте на экране, тогда должен быть создан определенный выход. Если он находит его в другом месте, то должен быть создан другой вывод. В настоящее время он готов к первой инструкции «If» и вытягивает этот вывод, даже если первое утверждение неверно.

Используя приведенный ниже пример, слово «Rate» появляется на строке, колонке (4,20) на экране, но оператор создает вывод, как и в (4,16), и поэтому вытягивает вывод из (4) , 27) вместо (4,31). Я переключил порядок вокруг, и он всегда использует первый вариант независимо от того, является ли он правильной инструкцией.

Я сократил код как можно больше. У меня был как Dim'd, так и строка, но изменилось значение RateName на Variant, чтобы убедиться, что это исправит проблему, но это не так.

Dim RateName As Variant 
Dim Curr As String 

If Session.FindText("Rate", 4, 16, 4) Then 
    RateName = Trim(Session.GetDisplayText(4, 27, 20)) 'R name for Amt Add, Amt Off, Buy/Get 
ElseIf Session.FindText("Rate", 4, 20, 4) Then 
    RateName = Trim(Session.GetDisplayText(4, 31, 20)) 'R name for Flat Amount, Pct Off 
End If 

If Session.FindText("Rate", 4, 16, 4) Then 
    Curr = Trim(Session.GetDisplayText(4, 58, 3)) 
ElseIf Session.FindText("Rate", 4, 20, 4) Then 
    Curr = Trim(Session.GetDisplayText(4, 62, 3)) 
End If 

Не уверен, что я делаю неправильно, так как у меня есть аналогичная логика в другом месте и она работает.

ответ

1

В случае VBA возвращение чего-то другого в 0 не является ИСТИННЫМ. Вы верно, когда вы используете некоторый оператор

If Session.FindText("Rate", 4, 16, 4) = "some text/value" Then 
If Session.FindText("Rate", 4, 16, 4) <> "some text/value" Then 
If Session.FindText("Rate", 4, 16, 4) >= "some text/value" Then 
If Session.FindText("Rate", 4, 16, 4) <= "some text/value" Then 

Кроме того, если текст Возвращается "True" или "False" для IF в VBA это просто текст, а не TRUE или FALSE

Редактировать # 1 из ваш комментарий ...

И вы можете использовать это:

If Session.FindText("Rate", 4, 16, 4) = Empty Then 
    'some code if the logical test is true 
else 
    'some code if the logical test is false 
end if 
+0

Спасибо за ваш комментарий. Я не совсем уверен, что понимаю. Поскольку оператор If неверен, так как «Rate» не существует, где сценарий сначала ищет его, не перейдет ли он дальше к Else If? Результат будет меняться, поэтому я не уверен, что могу использовать оператора. Я попытался использовать 'If Session.FindText (« Rate », 4, 16, 4) <>« Then », но у меня ошибка типа несоответствия. Еще раз спасибо. – DrewMan

+0

Рекомендуемый тип редактирования. Он решил проблему до тех пор, пока не изменил ситуацию, когда слово «Rate» появится в (4,20). Затем выход попал в ту же проблему, что и раньше. – DrewMan

Смежные вопросы