|
楼主 |
发表于 2020-6-24 10:18
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 lrh788 于 2020-6-26 11:13 编辑
Sub 合并当前工作簿下的所有工作表() '数组法,程序表头,以sub开头,以end sub结尾,固定格式; “汇总*”为程序名字,
Dim arr, i%, m%, r%, r1%, bm, t '变量数据类型定义,以关键字dim 开始定义,英文逗号分隔多个变量;
Dim sh As Worksheet, sht As Worksheet '定义为工作表
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
t = Timer
Set sh = Worksheets("总表")
sh.Cells.Clear: sh.Cells.NumberFormat = "@"
For Each sht In Worksheets '循环本工作簿的所有工作表 ,用的是for each 循环格式
If sht.Name <> sh.Name Then '判断是否存放目标数据的工作表,用到了工作表的.name 属性,.name 获得工作表的工作表名
r = sht.Cells(Rows.Count, 1).End(3).Row '通过A列来判断工作表最后一行数据的行
bm = bm & Chr(9) & sht.Name
m = m + 1
If m = 1 Then
arr = sht.Range("a1:v" & r) '将第一张表从第一行开始的数据存放在数组Arr中
Else
arr = sht.Range("a2:v" & r) '将第一张表从第二行开始的以后的数据存放在数组Arr中
End If
End If
r1 = sh.Cells(Rows.Count, 1).End(3).Row '定位目标工作表最后一行位置,通过此
sh.Range("a" & r1).Offset(1, 0).Resize(UBound(arr, 1), UBound(arr, 2)) = arr '通过数组把数据复制到目标区域中
Set arr = Nothing
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "耗时:" & Format(Timer - t, "0.000") & "秒。" & "共汇总下列" & m & "个工作表:" & Chr(10) & bm, vbInformation, "提示"
End Sub
请教下,此代码中我加了偏移一行Offset(1, 0)运行后,汇总表的第一行始终为空,如果不加偏移Offset(1, 0),在汇总分表时就无法提取分表的最后一行,请问怎么修改代码?
|
|