批量将工作表转换为独立工作簿_第1页
批量将工作表转换为独立工作簿_第2页
批量将工作表转换为独立工作簿_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

批量将工作表转换为独立工作簿SubNewbooks()

'EH技术论坛。VBA编程学习与实践。看见星光

DimshtAsWorksheet,strPath$

WithApplication.FileDialog(msoFileDialogFolderPicker)

'选择保存工作薄的文件路径

If.ShowThen

strPath=.SelectedItems(1)

'读取选择的文件路径

Else

ExitSub

'如果没有选择保存路径,则退出程序

EndIf

EndWith

IfRight(strPath,1)<>"\"ThenstrPath=strPath&"\"

Application.DisplayAlerts=False

'取消显示系统警告和消息,避免重名工作簿无法保存。当有重名工作簿时,会直接覆盖保存。

Application.ScreenUpdating=False

'取消屏幕刷新

ForEachshtInWorksheets

'遍历工作表

sht.Copy

'复制工作表,工作表单纯复制后,会成为活动工作薄

WithActiveWorkbook

.SaveAsstrPath&sht.Name,xlWorkbookDefault

'保存活动工作薄到指定路径下,以默认文件格式

.CloseTrue'关闭工作薄并保存

EndWith

Next

Application.ScreenUpdating=True'恢复屏幕刷新

Application.DisplayAlerts=True'恢复显示系统警告和消息

MsgBox"处理完成。",,"提醒"

EndSub一键将总表数据拆分为多个分表SubNewShts()

DimdAsObject,shtAsWorksheet,arr,brr,r,kr,i&,j&,k&,x&

DimRngAsRange,RgAsRange,tRow&,tCol&,aCol&,pd&

Application.ScreenUpdating=False

'关闭屏幕更新

Application.DisplayAlerts=False

'关闭警告信息提示

Setd=CreateObject("scripting.dictionary")

'set字典

SetRg=Application.InputBox("请框选拆分依据列!只能选择单列单元格区域!",Title:="提示",Type:=8)

'用户选择的拆分依据列

tCol=Rg.Column

'取拆分依据列列标

tRow=Val(Application.InputBox("请输入总表标题行的行数?"))

'用户设置总表的标题行数

IftRow=0ThenMsgBox"你未输入标题行行数,程序退出。":ExitSub

SetRng=ActiveSheet.UsedRange

'总表的数据区域

arr=Rng

'数据范围装入数组arr

tCol=tCol-Rng.Column+1

'计算依据列在数组中的位置

aCol=UBound(arr,2)

'数据源的列数

Fori=tRow+1ToUBound(arr)

'遍历数组arr

IfNotd.exists(arr(i,tCol))Then

d(arr(i,tCol))=i

'字典中不存在关键词则将行号装入字典

Else

d(arr(i,tCol))=d(arr(i,tCol))&","&i

'如果存在则合并行号,以逗号间隔

EndIf

Next

ForEachshtInWorksheets

'遍历一遍工作表,如果字典中存在则删除

Ifd.exists(sht.Name)Thensht.Delete

Next

kr=d.keys

'字典的key集

Fori=0ToUBound(kr)

'遍历字典key值

Ifkr(i)<>""Then

'如果key不为空

r=Split(d(kr(i)),",")

'取出item里储存的行号

ReDimbrr(1ToUBound(r)+1,1ToaCol)

'声明放置结果的数组brr

k=0

Forx=0ToUBound(r)

k=k+1

'累加记录行数

Forj=1ToaCol

'循环读取列

brr(k,j)=arr(r(x),j)

Next

Next

WithWorksheets.Add(,Sheets(Sheets.Count))

'新建一个工作表,位置在所有已存在sheet的后面

.Name=kr(i)

'表格命名

.[a1].Resize(tRow,aCol)=arr

'放标题行

.[a1].Offset(tRow,0).Resize(k,aCol)=brr

'放置数据区域

Rng.Copy

'复制粘贴总表的格式

.[a1].PasteSpecialPaste:=xlPasteFormats,Operation:=xlNone,SkipBlanks:=False,Transpose:=False

.[a1].Select

EndWith

EndIf

Next

Sheets(1).Activate

'激活第一个表格

Setd=Nothing

'释放字典

Erasearr:Erasebrr

'释放数组

MsgBox"数据拆分完成!"

Application.ScreenUpdating=True

'恢复屏幕更新

Application.DisplayAlerts=True

'恢复警示

EndSub一键汇总各分表数据到总表Subcollect()

'VBA编程学习与实践,一键多表数据汇总

DimshtAsWorksheet,rngAsRange,k&,trow&

Application.ScreenUpdating=False

'取消屏幕更新,加快代码运行速度

trow=Val(InputBox("请输入标题的行数","提醒"))

Iftrow<0ThenMsgBox"标题行数不能为负数。",64,"警告":ExitSub

'取得用户输入的标题行数,如果为负数,退出程序

Cells.ClearContents

'清空当前表数据

ForEachshtInWorksheets

'循环读取表格

Ifsht.Name<>ActiveSheet.NameThen

'如果表格名称不等于当前表名则进行汇总动作……

Setrng=sht.UsedRange

'定义rng为表格已用区域

k=k+1

'累计K值

Ifk=1Then

'如果是首个表格,则K为1,则把标题行一起复制到汇总表

rng.Copy

[a1].PasteSpecialPaste:=xlPasteValues

Else

'否则,扣除标题行后再复制黏贴到总表,只黏贴数值

rng.Offset(trow).Copy

Cells

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论