|
试试这个可达到您要的需求不?- ub 合并()
- Dim sht As Worksheet, i As Byte, x%, j%, n% '声明变量
- Application.ScreenUpdating = False '关闭屏幕刷新
- On Error Resume Next '当程序出错时继续执行下一句
- Application.DisplayAlerts = False '关闭提示(删除工作表时会有提示)
- Worksheets("汇总表").UsedRange.ClearContents '清空原表的内容
- For Each sht In Worksheets '遍历活动工作簿中的所有工作表
- If sht.Name <> "汇总表" Then '如果sht的名字不等于“总表”
- '如果工作表A列有值(忽略空表或者A列无值的工作表)
- If WorksheetFunction.CountA(sht.Range("A:A")) > 0 Then
- i = i + 1 '累加变量
- If i = 1 Then '如果变量i的值等于1
- sht.UsedRange.Copy '复制sht工作表的已用区域
- Range("a1").PasteSpecial xlPasteAllUsingSourceTheme '粘贴到活动工作表的A1单元格
- Range("a1").PasteSpecial xlPasteValues '再次粘贴,只粘贴值(防止合并前的公式的值不一致)
- Range("a1").PasteSpecial xlPasteColumnWidths '再次粘贴,只粘贴列宽
- x = sht.Cells(Rows.Count, 1).End(xlUp).Row '目标工作表行总数
- j = Worksheets("总表").Cells(Rows.Count, 1).End(xlUp).Row ' 活动工作表行总数
-
- Worksheets("汇总表").Range("I2" & ":" & "I" & x).Value = sht.Name
- Else
- sht.UsedRange.Offset(1, 0).Copy '复制sht工作表的已用区域(排除标题行)
- With Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) '引用A列最后一个非空行的下一行
- .PasteSpecial xlPasteAllUsingSourceTheme '粘贴
- .PasteSpecial xlPasteValues '再次粘贴,只粘贴列宽
- .PasteSpecial xlPasteColumnWidths '再次粘贴,只粘贴列宽
- End With
- x = sht.Cells(Rows.Count, 1).End(xlUp).Row '目标工作表行总数
- j = Worksheets("汇总表").Cells(Rows.Count, 1).End(xlUp).Row ' 活动工作表行总数
- Worksheets("汇总表").Range("I" & j - x + 2 & ":" & "I" & j).Value = sht.Name '添加哪个工作中考过行
-
- End If
- End If
- End If
- Next sht
- ActiveSheet.Range("$A$1:$p$" & j).RemoveDuplicates Columns:=1, Header:=xlNo '去除重复项
- Application.ScreenUpdating = True '恢复屏幕刷新
- End Sub
复制代码 |
|