Vba 在速度方面,嵌套的“if”和使用“if x、y、z和…”有什么区别吗?

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

我有一个简短的问题。两者在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 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