检查值是否可迭代vba

Gre*_*edo 6 excel vba excel-vba

在许多语言中,可以检查对象是否可迭代,如何为VBA执行此操作?

我可以试试:

Function isIterable(obj As Variant) As Boolean
    On Error Resume Next
    Dim iterator As Variant
    For Each iterator In obj
        Exit For
    Next
    isIterable = Err.Number = 0
End Function
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有内置或更好的方法?

Vit*_*ata 4

是否有内置功能没有。

有更好的方法吗?:

我会这样做:

Function isIterable(obj As Variant) As Boolean

    On Error GoTo isIterable_Error

    Dim iterator As Variant

    For Each iterator In obj
        isIterable = True
        Exit Function
    Next

isIterable_Error:

End Function
Run Code Online (Sandbox Code Playgroud)

因为=在同一条线上放置两次有点太多了。

  • @科斯塔斯K。这是。但它修复了我的强迫症。由于在 VBA 中这样使用的括号本质上意味着“将此表达式计算为一个值”,因此在这里使用它们有助于区分赋值运算符“=”和比较运算符“=”——在赋值运算符和比较运算符不同的其他语言中(例如`=` vs `==`),我不会放括号。 (3认同)
  • 为什么“On Error Goto 0”在退出函数时不是自动的?另外,无论如何,引发错误不会跳过该行吗?我认为你的方法也更好,因为它不涉及调用 `Err.Number` (2认同)