Vba 如果有多个和&;或

Vba 如果有多个和&;或,vba,if-statement,multiple-conditions,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(MailCount

我一直在尝试运行以下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
If(LandscapingDataRange(MailCounter,6)=1和(LandscapingDataRange(MailCounter,4)=0或LandscapingDataRange(MailCounter,5)=0))_
或者(LandscapingDataRange(MailCounter,6)=1和((LandscapingDataRange(MailCounter,4)-LandscapingDataRange(MailCounter,7))/LandscapingDataRange(MailCounter,4))>0.1)_
或者(LandscapingDataRange(MailCounter,6)=0,LandscapingDataRange(MailCounter,5)>0)_
或(00.1),然后
(LandscapingDataRange(MailCounter,6)

LandscapingDataRange(邮件计数器,5)


仍然应用在IF函数中。

我猜您使用的是
您应该使用的
ElseIf
,因此您的逻辑是错误的。在这种情况下,使用
选择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

我不明白,你们想要实现什么,但逻辑运算符有一个顺序,在这个顺序中它们被解析,就像加法/减法之前的乘法/除法一样

可能这就是您的问题所在。在计算任何
之前,所有
都已解决。因此,您必须使用括号,如果这不是顺序,您希望计算它


VisualBasic中的优先顺序不是在Xor之前和之前,也不是在Xor之前,同样的规则也应该适用于VBA。

使用
选择大小写
而不是您需要用一个例子来指定,因为我对VBAThis不是很好:
0
在vba中不起作用,需要分为两个独立的标准。
LandscapingDataRange(MailCounter,6)>0和LandscapingDataRange(MailCounter,6)<1