如何修改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
相关产品推荐
相关产品推荐

