|
Sub 合并()
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
说明:这是在罗老师代码基础上改的 |
|