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

VBA技术问询:如何将以FY开头的工作表加入数组并复制到新工作簿

筛选“FY”开头工作表并复制到新工作簿的VBA实现

问题分析

你的代码目前存在两个问题:一是If语句缺少对应的End If,二是未正确实现将符合条件的工作表存入数组的逻辑。下面给出完整解决方案,重点说明数组动态构建和工作表复制的实现方式。

完整代码

Sub Generate_Report()
    Dim current As Worksheet
    Dim wsArray() As Worksheet
    Dim wsCount As Integer
    
    wsCount = 0
    
    ' 遍历所有工作表,筛选以"FY"开头的存入数组
    For Each current In ThisWorkbook.Worksheets
        If Left(current.Name, 2) = "FY" Then
            wsCount = wsCount + 1
            ' 动态扩展数组,保留已有元素
            ReDim Preserve wsArray(1 To wsCount)
            ' 将当前工作表对象存入数组
            Set wsArray(wsCount) = current
        End If
    Next current
    
    ' 如果数组中有符合条件的工作表,复制到新工作簿
    If wsCount > 0 Then
        ' 复制数组内的所有工作表到新工作簿(新工作簿会自动创建)
        wsArray.Copy
    Else
        MsgBox "未找到以""FY""开头的工作表"
    End If
End Sub

关键代码说明

  • 动态数组构建:
    • 声明wsArray() As Worksheet作为存储工作表对象的数组,wsCount用于统计符合条件的工作表数量
    • 每次找到目标工作表时,用ReDim Preserve扩展数组长度,Preserve关键字确保之前存入的元素不会丢失
    • 由于工作表是对象类型,必须通过Set语句将其赋值给数组元素
  • 工作表复制:
    • 调用wsArray.Copy会自动创建新工作簿,并将数组内所有工作表一次性复制进去,效率更高
    • 增加wsCount > 0的判断,避免无目标工作表时执行复制操作引发报错
  • 原代码修正:补上了缺失的End If,同时明确遍历当前工作簿的工作表(ThisWorkbook.Worksheets),消除歧义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:17