我的代码如下:
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”或特定用户定义的值?
答案 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