利用VBA实现Word文档的批量拆分与合并本文作者(范晓燕,周涛峰),请您在阅读本文时尊重作者版权。
利用VBA实现Word文档的批量拆分与合并
摘要:介绍了利用VBA实现Word文件批量合并与拆分的方法和技术,并给出了关键代码,通过该方法,可以快速处理大量文档,实现文档的批量合并与拆分,可以大幅提高日常工作效率。
关键词:Word VBA;批量;合并与拆分Word Document Using VBA to Achieve Mass Split and Merge
FAN Xiao-yan1,2, ZHOU Tao-feng3
(1.School of Optoelectronic Information and Computer Engineering, University of Shanghai for Scince and Technology, Shanghai 200093, China; 2.Computer Application school, Shanghai Technical Institute of Electronics Information, Shanghai 201411, China; 3.School of Fisheries and Life, Shanghai Ocean University, Shanghai 201306, China)
Abstract: Description Word document using VBA to achieve combined with the split-volume methods and techniques, and the key code is given by this method, you can quickly handle a large number of documents for document merging and splitting volume, can significantly improve the efficiency of daily work.
Key words: word VBA; volume; merger and split
微软公司的Word是使用范围非常广的办公软件,具有强大的编辑功能,可以编辑文字、图形、图像、声音、动画,还可以插入其它软件制作的对象,能够满足用户的各种文档处理要求,为日常办公带来了极大的方便。
VBA是微软公司在Office产品中提供的程序设计语言和环境,它是Office功能的扩展,可以实现Office功能的二次开发,尤其在处理大量重复性工作时,VBA显得异常强大,可以成倍提高工作效率。
1 问题的提出
日常办公中,经常需要处理Word文件,当文件数量较少、文件体积较小时可以轻松应对,
但当文件数量较多、文件体积较大时,操作起来就要花费大量的时间和精力,而且很容易出错。
比如,每年年末,公司所有员工都要交工作总结,人事部门需要将所有人的总结汇总到一个文件里,以便向总经理汇报。再比如,每年年末,公司要将每个员工的工作业绩发给他们本人,而公司业绩管理系统导出的文件中,所有人都在同一个Word文件里,需要将他们一一拆分出来。
这种情况下,可以借助VBA实现文件的批量操作,大大提高办公效率和准确性。
2 解决思路
2.1 批量合并
对于第一种情况,需要用到文件的批量合并,可以编制VBA程序,让程序自动查每一个需要合并的文件,将里面的全部内容自动复制到指定的合并文件中,并自动保存,直到所有需要合并的文件都完成合并。
在这个过程中需要作以下准备:1)所有需要合并的文件都在同一个文件夹中;2)所有需要合并文件的文件名要有一定的规律,最好是连续的数字,不是连续数字也可以,但稍微麻烦,这个可以用批量改名软件实现。
2.2 批量拆分
对于第二种情况,需要用到文件的批量拆分,可以编制VBA程序,让程序在需要拆分的文件中,查标志独立文件开始的关键词,到第二个关键词后,将关键词前面的部分剪切到指定的文件中,并以要求的文件名保存,如此循环,直到整个文件被顺利拆分完毕。
在这个过程中需要作以下准备:1)需要拆分的文件中要有较为明显的独立文件分隔标记,通常系统导出的文件都有,比如“姓名”、“部门”等;2)需要拆分的文件要做好备份。
3 程序实现
3.1 批量合并
3.1.1 程序开头部分
程序开头部分用于做好各种准备,比如定义变量等,代码如下:
'此程序用于文件的批量合并
filedir = "C:\Users\admin\Desktop\工作总结\合并\" '指定文件存放路径
Application.ScreenUpdating = False '关闭屏幕刷新提高速度
Dim filenum As Integer '要合并的文件数
Dim a As Integer '定义数字变量
Dim FileName1 As String '合并后的文件名
Dim FileName2 As String '定义要合并的文件名变量
3.1.2 关键部分
本部分代码主要用于打开要合并的文件,并复制里面的全部内容,并粘贴到指定的文件中,下面仅给出关键代码,其他代码从略。
Do While a <= filenum
FileName2 = CStr(a) ".doc"
ChangeFileOpenDirectory filedir
Documents.Open FileName:= FileName2, …… '打开要合并的文件,代码略
Selection.WholeStory '全选
Selection.Copy '复制
ActiveDocument.Close '关闭文件
Documents.Open FileName:=FileName1, …… '打开合并后的文件,代码略
Selection.EndKey Unit:=wdStory '将光标移到文件尾部
Selection.TypeParagraph '插入新段落,避免合并混乱
Selection.PasteAndFormat (wdPasteDefault) '粘贴
ActiveDocument.Save '保存文件
ActiveDocument.Close '关闭文件
a = a 1 '变量加1
Loop '循环
3.2 批量拆分
批量拆分的过程相对要麻烦一些。
3.2.1 程序开头部分
程序开头部分代码如下:
'此程序用于文件的批量拆分
filedir = "C:\Users\admin\Desktop\工作总结\拆分\" '指定文件存放路径
Application.ScreenUpdating = False '关闭屏幕刷新提高速度
Dim a As Integer '定义数字变量
Dim FileName1 As String '要拆分的文件名
Dim FileName2 As String '定义拆分后的文件名变量
3.2.2 关键部分
本部分代码主要完成以下操作:1)打开要拆分的文件;2)查文件分隔关键词,本例中将关键词定为“姓名:”;3)将关键词前面的部分剪切到指定的文件中,并保存。
ChangeFileOpenDirectory filedir
Documents.Open FileName:=FileName, …… '打开要拆分的文件
……
Do While a > 0 '开始循环
Selection.HomeKey Unit:=wdStory '将光标移到文件开头
Selection.Find.ClearFormatting '查关键词
With Selection.Find
.Text = "姓名:"
……
End With
Selection.Find.Execute '第一次查
Selection.Find.Execute '第二次查
Selection.MoveUp Unit:=wdLine, Count:=1 '将光标向上移到标题位置
Selection.MoveUp Unit:=wdLine, Count:=1 '将光标再向上移
Selection.EndKey Unit:=wdLine '将光标移到行尾
If Selection.Find.Found = False Then '规定循环结束标志
a = a - 1
Selection.EndKey Unit:=wdStory
End If
Selection.HomeKey Unit:=wdStory, Extend:=wdExtend '从当前位置选到文件头
Selection.Cut '剪切
Documents.Add Template:="Normal", …… '建立新文件,代码略
Selection.Find.ClearFormatting '建立新文件
With Selection.Find '查关键词确定新文件名
.Text = "姓名:"
……
End With
vba编程技巧
……
ActiveDocument.SaveAs FileName:= FileName2,……
ActiveDocument.Save '保存文件
ActiveDocument.Close '关闭文件
……
Loop
4 结束语
以上代码都经过实际测试,在Word 2003和Word 2007上均可正常执行。实际测试发现,完成一个文件的合并或拆分,只需要几秒钟,一小时可以完成近千个文件的合并或拆分,效率很高,而且不容易出错。
本系统是实现文件批量合并和拆分的最简单代码,如果要实现更丰富的功能和更人性化的界面,还要做一些改进,具体如下:
1)设计界面。以上代码虽然可以使用,但缺乏人性化,使用者需要对VBA有一定的了解才能正常使用,对于普通人来说很难使用,设计一个友好的用户界面,把不同的功能设计成专门的按钮,可以提高程序的易用性。
2)制作工具栏。工具栏是Word使用者经常用到的部分,为了使程序使用起来更加方便,可以将程序制作成工具栏,集成到Word中,与Word融为一体,用户使用起来会感觉得心应手。
参考文献:
[1] 刘贵伟,廉锁原,彭彩红.利用Word VBA程序快速自动编排离子反应方程式[J].辽宁师范大学学报:自然科学版,2008,31(4):439-442.