如果'AND'和'OR'声明

时间:2011-11-29 11:15:59

标签: vba if-statement

我的代码如下:

If (InStr(1, "ALL", Itype) Or InStr(1, Uvar.Device, Itype)  _
And (InStr(1, "ALL", Isec) Or InStr(1, Uvar.Sec, Isec)) _
And (InStr(1, "ALL", Idev) Or InStr(1, Uvar.Model, Idev)) Then Useline = "TRUE"

稍微扩展一下:

Itype是一个长字符串,例如 -

  • Itype = All, Apple, Pear, Orange
  • Isec = dog, cat, duck
  • Idev = tree, flower, plant

每个UVar.x都是一个单词,例如 -

  • UVar.Device = Apple
  • UVar.Sec = Cat
  • UVar.Model = tree

因此,如果Itype包含字符串“All”或它包含UVar.Device的值 和Isec还包含字符串“All”或它包含UVar.Sec的值 和IDev还包含字符串“All”或它包含UVar.Model

的值

然后我想拥有if statement = true

只要至少有一个值标准集匹配,我上面的代码似乎返回true,无论使用什么值。

因此,字符串IType,Idev和Isec是否包含值“all”或特定用户定义的值?

2 个答案:

答案 0 :(得分:2)

嗯,首先,你的代码没有编译 - 你要么必须删除IF之后的左括号,要么添加一个匹配的右括号。

更重要的是,你已经将Instr()参数的顺序混淆了。首先是要查看 IN 的字符串,其次是要查看 FOR 的字符串。那应该解决它。

PS:虽然Brettdj的回答是正确的,但VBA会将位置0解释为假,其他任何一个都是真的,所以这不一定是问题。

答案 1 :(得分:1)

(更新:修复顺序并返回True布尔变量)

InStr返回一个位置,而不是True或False。因此,您可以将两个测试一起添加以测试> 0,因为两个配对条件中的至少一个为真。然后测试所有3对,即

Dim bVar As Boolean
bVar = (InStr(Itype, "ALL") + InStr(Itype, Uvar.Device)) > 0 _
       And (InStr(Isec, "ALL") + InStr(Isec, Uvar.Sec)) > 0 _
       And (InStr(Idev, "ALL") + InStr(Idev, Uvar.Model)) > 0