Vba 如果';和';和';或';声明
我的代码如下:Vba 如果';和';和';或';声明,vba,if-statement,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、苹果、
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、苹果、梨、橘子
Isec=狗、猫、鸭
Idev=树、花、植物
UVar.Device=Apple
UVar.Sec=Cat
UVar.Model=tree
if语句=true
无论使用什么值,只要至少有一个值标准集匹配,我上面的代码似乎都会返回true
因此,字符串IType、Idev和Isec是否都包含值“all”或特定的用户定义值 (更新:修复顺序并返回真布尔变量)
InStr
返回一个位置,不是真或假。因此,您可以将这两个测试添加到一起以测试>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
(更新:修复顺序并返回真布尔变量)
InStr
返回一个位置,不是真或假。因此,您可以将这两个测试添加到一起以测试>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
首先,您的代码无法编译—您要么删除IF后面的左括号,要么添加匹配的右括号 但更重要的是,Instr()参数的顺序混淆了。第一个是要查找的字符串,第二个是要查找的字符串。这应该可以解决问题
PS:虽然Brettdj的答案是正确的,但VBA会将位置0解释为错误,而将其他任何位置解释为正确,因此这不一定是问题所在 首先,您的代码无法编译—您要么删除IF后面的左括号,要么添加匹配的右括号 但更重要的是,Instr()参数的顺序混淆了。第一个是要查找的字符串,第二个是要查找的字符串。这应该可以解决问题
PS:虽然Brettdj的答案是正确的,但VBA会将位置0解释为错误,而将其他任何位置解释为正确,因此这不一定是问题所在 对了,我的实际代码中有一个额外的括号,一定是在复制过程中删除的。我想我可能把gt和=Find sheet函数混淆了,这是要查找的字符串,后面是要查找的字符串。为这些想法干杯我会查一查是的,就是这个!当它运行时,我假设它是我的“如果”、“和”和“或”在错误的位置,但将其全部交换是完美的。善意的问候和许多感谢是真的,VBA将解释任何非零值为真。然而,在国际海事组织看来,这种做法与其说是良好的编码实践,不如说是一种黑客行为。将位置与0的值进行比较对我们人类来说更容易理解。我想这是关于语法和语义的讨论。@Bobort:我完全同意-我也希望看到显式检查,但没有显式检查它确实有效。在数字上使用VBA的“逻辑”运算符是自找麻烦的。请看你的右边,我的实际代码中有一个额外的括号,它一定是在复制过程中丢失的。我想我可能把gt和=Find sheet函数混淆了,这是要查找的字符串,后面是要查找的字符串。为这些想法干杯我会查一查是的,就是这个!当它运行时,我假设它是我的“如果”、“和”和“或”在错误的位置,但将其全部交换是完美的。善意的问候和许多感谢是真的,VBA将解释任何非零值为真。然而,在国际海事组织看来,这种做法与其说是良好的编码实践,不如说是一种黑客行为。将位置与0的值进行比较对我们人类来说更容易理解。我想这是关于语法和语义的讨论。@Bobort:我完全同意-我也希望看到显式检查,但没有显式检查它确实有效。在数字上使用VBA的“逻辑”运算符是自找麻烦的。看见