收藏 分销(赏)

批量将工作表转换为独立工作簿.doc

上传人:丰**** 文档编号:10695906 上传时间:2025-06-10 格式:DOC 页数:3 大小:18KB 下载积分:5 金币
下载 相关 举报
批量将工作表转换为独立工作簿.doc_第1页
第1页 / 共3页
批量将工作表转换为独立工作簿.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
批量将工作表转换为独立工作簿 Sub Newbooks()     'EH技术论坛。VBA编程学习与实践。看见星光     Dim sht As Worksheet, strPath$     With Application.FileDialog(msoFileDialogFolderPicker)    '选择保存工作薄的文件路径         If .Show Then             strPath = .SelectedItems(1)             '读取选择的文件路径         Else             Exit Sub             '如果没有选择保存路径,则退出程序         End If     End With     If Right(strPath, 1) <> "\" Then strPath = strPath & "\"     Application.DisplayAlerts = False     '取消显示系统警告和消息,避免重名工作簿无法保存。当有重名工作簿时,会直接覆盖保存。     Application.ScreenUpdating = False     '取消屏幕刷新     For Each sht In Worksheets     '遍历工作表         sht.Copy         '复制工作表,工作表单纯复制后,会成为活动工作薄         With ActiveWorkbook             .SaveAs strPath & sht.Name, xlWorkbookDefault             '保存活动工作薄到指定路径下,以默认文件格式             .Close True '关闭工作薄并保存         End With     Next     Application.ScreenUpdating = True '恢复屏幕刷新     Application.DisplayAlerts = True '恢复显示系统警告和消息     MsgBox "处理完成。", , "提醒" End Sub 一键将总表数据拆分为多个分表 Sub NewShts()     Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x&     Dim Rng As Range, Rg As Range, tRow&, tCol&, aCol&, pd&     Application.ScreenUpdating = False '关闭屏幕更新     Application.DisplayAlerts = False '关闭警告信息提示     Set d = CreateObject("scripting.dictionary") 'set字典     Set Rg = Application.InputBox("请框选拆分依据列!只能选择单列单元格区域!", Title:="提示", Type:=8)     '用户选择的拆分依据列     tCol = Rg.Column '取拆分依据列列标     tRow = Val(Application.InputBox("请输入总表标题行的行数?"))     '用户设置总表的标题行数     If tRow = 0 Then MsgBox "你未输入标题行行数,程序退出。": Exit Sub     Set Rng = ActiveSheet.UsedRange '总表的数据区域     arr = Rng '数据范围装入数组arr     tCol = tCol - Rng.Column + 1 '计算依据列在数组中的位置     aCol = UBound(arr, 2) '数据源的列数     For i = tRow + 1 To UBound(arr) '遍历数组arr         If Not d.exists(arr(i, tCol)) Then             d(arr(i, tCol)) = i '字典中不存在关键词则将行号装入字典         Else             d(arr(i, tCol)) = d(arr(i, tCol)) & "," & i '如果存在则合并行号,以逗号间隔         End If     Next     For Each sht In Worksheets '遍历一遍工作表,如果字典中存在则删除         If d.exists(sht.Name) Then sht.Delete     Next     kr = d.keys '字典的key集     For i = 0 To UBound(kr) '遍历字典key值         If kr(i) <> "" Then '如果key不为空             r = Split(d(kr(i)), ",") '取出item里储存的行号             ReDim brr(1 To UBound(r) + 1, 1 To aCol) '声明放置结果的数组brr             k = 0             For x = 0 To UBound(r)                 k = k + 1 '累加记录行数                 For j = 1 To aCol '循环读取列                     brr(k, j) = arr(r(x), j)                 Next             Next             With Worksheets.Add(, Sheets(Sheets.Count))             '新建一个工作表,位置在所有已存在sheet的后面                 .Name = kr(i) '表格命名                 .[a1].Resize(tRow, aCol) = arr '放标题行                 .[a1].Offset(tRow, 0).Resize(k, aCol) = brr '放置数据区域                 Rng.Copy '复制粘贴总表的格式                 .[a1].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False                 .[a1].Select             End With         End If     Next     Sheets(1).Activate '激活第一个表格     Set d = Nothing '释放字典     Erase arr: Erase brr '释放数组     MsgBox "数据拆分完成!"     Application.ScreenUpdating = True '恢复屏幕更新     Application.DisplayAlerts = True '恢复警示 End Sub 一键汇总各分表数据到总表 Sub collect()     'VBA编程学习与实践,一键多表数据汇总     Dim sht As Worksheet, rng As Range, k&, trow&     Application.ScreenUpdating = False     '取消屏幕更新,加快代码运行速度     trow = Val(InputBox("请输入标题的行数", "提醒"))     If trow < 0 Then MsgBox "标题行数不能为负数。", 64, "警告": Exit Sub     '取得用户输入的标题行数,如果为负数,退出程序     Cells.ClearContents     '清空当前表数据     For Each sht In Worksheets     '循环读取表格         If sht.Name <> ActiveSheet.Name Then         '如果表格名称不等于当前表名则进行汇总动作……             Set rng = sht.UsedRange             '定义rng为表格已用区域             k = k + 1             '累计K值             If k = 1 Then             '如果是首个表格,则K为1,则把标题行一起复制到汇总表                 rng.Copy                 [a1].PasteSpecial Paste:=xlPasteValues             Else                 '否则,扣除标题行后再复制黏贴到总表,只黏贴数值                 rng.Offset(trow).Copy                 Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1).PasteSpecial Paste:=xlPasteValues             End If         End If     Next     [a1].Activate     '激活A1单元格     Application.ScreenUpdating = True     '恢复屏幕刷新 End Sub
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服