我正在尝试在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
不确定我做错了什么,因为我在其他地方有类似的逻辑并且它正在工作。
答案 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
只是一个文字,而不是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