如果有多个和&要么

时间:2015-12-14 17:02:37

标签: vba if-statement multiple-conditions

我一直在尝试运行以下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)

中的0和0

仍然应用于IF功能。

2 个答案:

答案 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。