VBA 筛选并复制数据 - 解决下标越界错误

以下 VBA 代码实现从源工作表中筛选数据并复制到目标工作表:

Sub FilterAndCopy()
    Dim wsSource As Worksheet, wsDest As Worksheet
    Dim rngSource As Range, rngDest As Range
    Dim lastRow As Long
    
    '设置源工作表和筛选区域
    Set wsSource = Worksheets('Sheet1')
    Set rngSource = wsSource.Range('A1:AO22987')
    
    '设置目标工作表和输出区域
    Set wsDest = Worksheets('Sheet3')
    Set rngDest = wsDest.Range('A5:AO22987')
    
    '清除目标工作表原有内容
    rngDest.ClearContents
    
    '筛选数据
    rngSource.AutoFilter Field:=1, Criteria1:=Range('$D$2').Value, Operator:=xlOr, Criteria2:=Range('$D$2').Value
    
    '获取筛选结果的最后一行
    lastRow = rngSource.SpecialCells(xlCellTypeVisible).Cells(rngSource.Columns.Count).Row
    
    '复制筛选结果到目标工作表
    rngSource.Resize(lastRow - 1, rngSource.Columns.Count).Offset(1, 0).Copy rngDest
    
    '取消筛选
    rngSource.AutoFilter

End Sub

可能出现下标越界的原因是目标工作表的输出区域和源工作表的筛选区域大小不一致,导致复制时超出了目标工作表的范围。

解决方法:

  1. 检查输出区域的范围是否正确: 确保目标工作表的输出区域大小与筛选后的数据大小一致。
  2. 调整输出区域的大小: 如果输出区域过小,可以将其扩大到足以容纳筛选后的所有数据。

例如: 如果筛选结果包含 1000 行数据,而目标工作表的输出区域只有 500 行,则需要将输出区域扩大到至少 1000 行才能避免下标越界错误。

注意: 在复制数据之前,确保目标工作表中没有其他数据,否则可能会覆盖现有数据。

希望以上内容能帮助您解决 VBA 筛选并复制数据时的下标越界问题。如有任何问题,请随时提问。


原文地址: https://www.cveoy.top/t/topic/lKqs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录