|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
非常感谢你在
http://club.excelhome.net/viewthread.php?tid=522120
的帮助。
不知能否受累帮忙加上代码注释?学习一下?
再次表示感谢。
以上短信收到,注释如下:
Sub Macro1()
Dim wb As Workbook, arr, sh As Worksheet
Dim k, t, i&, j&, d As Object, ds As Object
Set d = CreateObject("scripting.dictionary") '创建字典对象
Set ds = CreateObject("scripting.dictionary")
For Each sh In Sheets '逐表
Set ds(sh.Name) = CreateObject("scripting.dictionary") '创建该表字典对象
arr = sh.UsedRange '已经使用区域写入数组
For i = 4 To sh.Range("a65536").End(xlUp).Row '逐行
If Len(arr(i, 1)) Then '非空
If Asc(arr(i, 1)) < 0 Then '汉字
d(arr(i, 1)) = "" '部门名称添加到字典键值(不重复部门名称)
ds(sh.Name)(arr(i, 1)) = i '部门名称添加到该表字典键值,行号添加到字典条目
End If
End If
Next
ds(sh.Name)("") = i '多记录一个行号(最后一个非空单元格下面一行)
Next
k = d.Keys '不重复部门名称写入数组
Application.ScreenUpdating = False '关闭屏幕刷新
Application.DisplayAlerts = False '关闭警告
With ThisWorkbook '本工作簿
For i = 0 To UBound(k) '逐个不重复部门
Set wb = Workbooks.Add(xlWBATWorksheet) '新建一个只有一个工作表的工作簿
For Each sh In .Sheets '本工作簿逐表
sh.Copy After:=wb.Sheets(wb.Sheets.Count) '工作表复制到新建工作簿后面
With wb.Sheets(wb.Sheets.Count) '新复制工作表
t = ds(.Name).Items '新复制工作表字典记录所有部门名称行号写入数组
arr = .UsedRange '已经使用区域写入数组
For j = UBound(t) - 1 To 0 Step -1 '从下至上逐个部门名称行号
If arr(t(j), 1) <> k(i) Then .Cells(t(j), 1).Resize(t(j + 1) - t(j)).EntireRow.Delete '如果该部门名称不等于不重复部门则所在区域整行删除
Next
End With
Next
wb.Sheets(1).Delete '删除新建工作簿第一个空工作表
wb.SaveAs ThisWorkbook.Path & "\拆分表1\" & k(i) & ".xls" '另存为新建工作簿,名称为个不重复部门
wb.Close '关闭新建工作簿
Next
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "ok"
End Sub |
|