Vba 在速度方面,嵌套的“if”和使用“if x、y、z和…”有什么区别吗?
我有一个简短的问题。两者在VBA方面有什么不同吗Vba 在速度方面,嵌套的“if”和使用“if x、y、z和…”有什么区别吗?,vba,ms-access,if-statement,flow-control,Vba,Ms Access,If Statement,Flow Control,我有一个简短的问题。两者在VBA方面有什么不同吗 if x1 and x2 and x3 and ... and x10 then foo end if 及 关于速度 更具体地说: 我有10列数据,需要逐行比较数据库中的重复数据,例如SELECT DISTINCT在这种情况下不起作用 我可以想象,使用 x1 = recordset.fields("Field1").value if x1 then x2 = recordset.fields("Field2").value if
if x1 and x2 and x3 and ... and x10 then
foo
end if
及
关于速度
更具体地说:
我有10列数据,需要逐行比较数据库中的重复数据,例如SELECT DISTINCT在这种情况下不起作用
我可以想象,使用
x1 = recordset.fields("Field1").value
if x1 then
x2 = recordset.fields("Field2").value
if x2 then
x3 = recordset.fields("Field3").value
if x3 then
...
foo
end if
end if
end if
将比
x1 = recordset.fields("Field1").value
x2 = recordset.fields("Field2").value
...
if x1 and x2 and x3 and ... and x10 then
foo
end if
因为我不必从记录集中读取所有数据。或者ifs的数量会扼杀这种速度优势吗?嵌套If在优化方面是一个更好的选择。如果条件失败,As-Nested If将忽略所有其他条件,但是,如果使用AND或or,则不会优化一行,因为每个条件都是在得出结论之前执行的。此外,如果嵌套的代码缩进正确,那么它们的可读性和可维护性也会更好
所以,如果我在任何一天使用多个条件,那么嵌套就结束了 一行程序正在检查所有条件,如果其中任何一个条件已经失败,则忽略它们
Sub Main()
If Check And Check And Check Then
End If
End Sub
Function Check() As Boolean
Debug.Print "checked"
Check = False
End Function
嵌套的ifs是更好的选择,因为一旦一个条件失败,代码执行将立即跳转到OR:else/end if块,而不尝试计算所有其他条件
这是一种生活方式
Sub Main()
If Check And Check And Check Then
End If
End Sub
Function Check() As Boolean
Debug.Print "checked"
Check = False
End Function