VBA不识别“If”语句条件

时间:2016-01-19 18:40:22

标签: excel vba excel-vba

我正在尝试在Excel VBA中使用“If”逻辑,但脚本始终为两个区域选择第一个选项,即使该语句不正确。

代码的要点是如果“Rate”一词出现在屏幕上的某个位置,则应创建某些输出。如果它在不同的位置找到它,则应创建不同的输出。目前,即使第一个语句不正确,它也准备好了第一个“If”语句并提取输出。

使用下面的示例,“Rate”一词出现在屏幕上的行,列(4,20)处,但语句正在创建输出,就像它在(4,16)处,因此从(4, 27)而不是(4,31)。我已经切换了订单,它总是使用第一个选项,无论它是否是正确的声明。

我尽可能地缩写代码。我把Dim作为一个字符串,但将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 个答案:

答案 0 :(得分:1)

对于VBA,返回不同于0的内容不为TRUE。当你使用一些算子

时,你会得到真实的
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

另外,如果VBA中"True"返回的文字为"False"IF只是一个文字,而不是TRUEFALSE

编辑#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