You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA中用For循环遍历ArrayList报错,如何实现无错误遍历?

解决VBA ArrayList遍历的索引越界问题

嘿,这可是ArrayList新手常踩的典型坑!我来帮你捋清楚问题出在哪,以及怎么解决。

错误原因拆解

你用的System.Collections.ArrayList是0基索引的(和VBA原生数组默认的1基规则不一样):

  • 第一个元素的索引是0,最后一个元素的索引是arr.Count - 1
  • 你原来的循环写了For i = 1 To arr.Count,当i等于arr.Count的时候,就超出了ArrayList的最大索引范围,自然会触发「索引超出范围」的错误
  • 另外你提到的LBound和UBound确实只适用于VBA原生数组,ArrayList根本不认这俩方法,它用Count属性来获取元素总数

两种修正方案

方案1:修正索引范围的For循环

把遍历的起始和结束值改成0到arr.Count - 1就行,代码如下:

Function test(dataArray() As Double)
    Dim i As Long
    Dim arr As Object
    Set arr = CreateObject("System.Collections.ArrayList")
    
    ' 将原生数组元素导入ArrayList
    For i = LBound(dataArray) To UBound(dataArray)
        arr.Add dataArray(i)
    Next
    
    arr.Sort
    
    ' 修正索引范围:从0开始,到Count-1结束
    For i = 0 To arr.Count - 1
        If arr(i) <= 10000 Then
            ' 这里写你的业务逻辑,比如打印符合条件的元素
            Debug.Print arr(i)
        End If
    Next
End Function

方案2:用For Each遍历(更推荐)

如果你不需要用到索引值,直接用For Each遍历会更简洁,完全不用操心索引的问题:

Function test(dataArray() As Double)
    Dim num As Variant
    Dim arr As Object
    Set arr = CreateObject("System.Collections.ArrayList")
    
    ' 将原生数组元素导入ArrayList
    For i = LBound(dataArray) To UBound(dataArray)
        arr.Add dataArray(i)
    Next
    
    arr.Sort
    
    ' 直接遍历每个元素,无需关心索引
    For Each num In arr
        If num <= 10000 Then
            ' 这里写你的业务逻辑,比如打印符合条件的元素
            Debug.Print num
        End If
    Next
End Function

额外小贴士

  • 以后要获取ArrayList的元素总数,直接用arr.Count就好,别再想着LBound和UBound啦
  • 如果你需要在ArrayList中查找、删除元素,也记得遵循0基索引的规则哦

内容的提问来源于stack exchange,提问作者Ans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:39:35