我一直在尝试运行以下IF条件,但它无法正常工作:
If (LandscapingDataRange(MailCounter, 6) = 1 And (LandscapingDataRange(MailCounter, 4) = 0 Or LandscapingDataRange(MailCounter, 5) = 0)) _
Or (LandscapingDataRange(MailCounter, 6) = 1 And ((LandscapingDataRange(MailCounter, 4) - LandscapingDataRange(MailCounter, 7)) / LandscapingDataRange(MailCounter, 4)) > 0.1) _
Or (LandscapingDataRange(MailCounter, 6) = 0 And LandscapingDataRange(MailCounter, 5) > 0) _
Or (0 < LandscapingDataRange(MailCounter, 6) < 1 And (LandscapingDataRange(MailCounter, 4) = 0 Or LandscapingDataRange(MailCounter, 5) = 0)) _
Or (0 < LandscapingDataRange(MailCounter, 6) < 1 And ((LandscapingDataRange(MailCounter, 4) - LandscapingDataRange(MailCounter, 7)) / LandscapingDataRange(MailCounter, 4)) > 0.1) Then
(LandscapingDataRange(MailCounter, 6)
中0为0的行
LandscapingDataRange(MailCounter, 5)
仍然应用于IF功能。
答案 0 :(得分:0)
我猜你正在使用Or
你应该使用ElseIf
,所以你的逻辑错了。在这种情况下,请改用Select Case
- 它更快更干净。这是前3个条件和Else
子句的示例 - 只需根据需要添加其他条件。
Select Case True
(LandscapingDataRange(MailCounter, 6) = 1 And (LandscapingDataRange(MailCounter, 4) = 0 Or LandscapingDataRange(MailCounter, 5) = 0))
'// Do Something
(LandscapingDataRange(MailCounter, 6) = 1 And ((LandscapingDataRange(MailCounter, 4) - LandscapingDataRange(MailCounter, 7)) / LandscapingDataRange(MailCounter, 4)) > 0.1)
'// Do Something
(LandscapingDataRange(MailCounter, 6) = 0 And LandscapingDataRange(MailCounter, 5) > 0)
'// Do Something
Case Else
'// Do Something if none of the criteria are met.
End Select
答案 1 :(得分:0)
我不知道你想要达到什么,但是逻辑运算符有一个顺序,在这个顺序中它们被解析,就像加法/减法之前的乘法/除法一样。
也许这就是你的问题。在计算任何++i
之前,将解析所有Or
。所以你必须使用括号,如果这不是订单,你想要计算它。
Visual Basic中的优先顺序不是在Xor之前和之前,也不是在Xor之前,并且相同的规则也应该适用于VBA。