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

如何修改Excel VBA宏以仅合并指定工作表而非全部非Combined表

宏修改方案

你仅需调整原有代码中的工作表判断规则即可实现需求,原逻辑为「排除Combined表后合并所有工作表」,调整为「仅匹配指定名称的工作表才执行合并」。

具体修改点

找到循环内的判断行:

If wksSrc.Name <> "Combined" Then

将其替换为仅匹配目标工作表的条件即可,本次你需要合并tab1、tabA,修改后的条件为:

If wksSrc.Name = "tab1" Or wksSrc.Name = "tabA" Then

如果后续需要新增参与合并的工作表,直接在条件后追加Or wksSrc.Name = "你需要的表名"即可。

修改后完整代码

Option Explicit
Public Sub CombineDataFromAllSheets()
    Sheets("Combined").Rows("2:" & Sheets("Combined").Rows.Count).ClearContents
    Dim wksSrc As Worksheet, wksDst As Worksheet
    Dim rngSrc As Range, rngDst As Range
    Dim lngLastCol As Long, lngSrcLastRow As Long, lngDstLastRow As Long
    
    'Notes: "Src" 是 Source(源表)的缩写,"Dst" 是 Destination(目标表)的缩写
    
    '提前定义引用
    Set wksDst = ThisWorkbook.Worksheets("Combined")
    lngDstLastRow = LastOccupiedRowNum(wksDst) '<~ 函数已在其他位置定义
    lngLastCol = LastOccupiedColNum(wksDst) '<~ 函数已在其他位置定义
    
    '设置初始目标写入范围
    Set rngDst = wksDst.Cells(lngDstLastRow + 1, 1)
    
    '遍历所有工作表
    For Each wksSrc In ThisWorkbook.Worksheets
    
        '仅合并指定名称的工作表
        If wksSrc.Name = "tab1" Or wksSrc.Name = "tabA" Then
            
            '获取当前源表最后一行有数据的行号
            lngSrcLastRow = LastOccupiedRowNum(wksSrc)
            
            '读取源表数据并写入目标表
            With wksSrc
                Set rngSrc = .Range(.Cells(2, 1), .Cells(lngSrcLastRow, lngLastCol))
                rngSrc.Copy Destination:=rngDst
            End With
            
            '更新下一次写入的起始位置
            lngDstLastRow = LastOccupiedRowNum(wksDst)
            Set rngDst = wksDst.Cells(lngDstLastRow + 1, 1)
            
        End If
    
    Next wksSrc

End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:57:04