Excel VBA中如何创建兼容For Each循环的空可迭代结构
Excel VBA 实现For Each循环0次迭代的方案
你遇到的核心问题是未初始化的动态数组会触发For Each循环报错,以下几种方案可满足你的全部要求:
方案1:返回空的Collection对象
Collection是VBA原生可枚举对象,空集合会让For Each直接跳过循环体,且客户端无需额外检查:
Function GetChildren() As Collection Set GetChildren = New Collection End Function
直接使用原有For Each代码即可,循环体不会执行,也不会抛出任何错误。
方案2:返回已初始化的空数组
原代码中的未初始化数组是非法的可枚举对象,只需将数组初始化为元素数量为0的合法数组:
Function GetChildren() As Variant() Dim children() As Variant ' 定义下界大于上界的数组,元素数为0 ReDim children(-1 To -1) GetChildren = children End Function
该数组是合法可枚举类型,For Each遍历它时会直接跳过循环。
方案3:返回空的Dictionary对象
Dictionary的键集合支持枚举,空Dictionary同样会让For Each循环不执行:
Function GetChildren() As Object Set GetChildren = CreateObject("Scripting.Dictionary") End Function
注意返回类型需声明为Object,调用时For Each会遍历字典的键(空字典无迭代动作)。
以上方案均满足:兼容For Each循环结构、客户端无需错误/空值检查、可在GetChildren函数内独立实现的要求。
内容的提问来源于stack exchange,提问作者Gyula Sámuel Karli
相关产品推荐
相关产品推荐

