VBA应用——从日志中复制有用信息进行统计

七海恋空 2014-01-11 浏览(0 评论(0

最近才开始研究宏,不是游戏里的宏啦,而是OFFICE里的宏。上面的领导要我们统计用户的审核信息,这些数据在数据库里获取不到,你SQL再牛逼也没用。最后还是从日志里找,原先他们是这样找的:按关键字“审核人:”查找,因为日志文件都是这样的固定格式:“审核人:某某某”。找到一个人名就计数一次,新的人名就添新的一项。反正意思就是统计一天多少人审核了,审核了多少次。好几兆的日志文件啊,CTRL+F快捷键都快摁烂了

人类是高智商的动物,这种低级的活怎么能让人来做呢?计算机就可以帮我们完成啊!我的同事当然不知道WORD里面的宏能自动完成这些繁琐而重复的工作。我是知道,但是不会写,因为一听说要写代码,就觉得挺复杂。但是,不写这个宏,以后每天就得统计日志信息了,我怎么能把时间浪费在那种无聊的事情上呢?于是硬着头皮上网找关于宏的资料。

虽然说是打算自己写一个宏,但是没准网上也有遇到同样问题的前辈们,而且他们有现成的代码,我直接复制粘贴岂不省事。带着这样的侥幸的心理,我是挖地三尺的用百度搜索。一些没接触过的人甚至不知道如何搜索自己问题的答案,因为对搜索引擎来说,关键字极其重要。度娘不是你输完问题,就会给你答案的。在偌大的因特网上,我东点一下,西点一下,总算找到一点门路。原来宏是用VB写的,还有个叫VBA的东西。VB简单啊,知道特定的对象和方法我就能把这宏写出来。(其实算法,我还是花了点时间去想的)看代码:


 

Sub output()
Windows("data.docx").Activate
Selection.HomeKey wdStory
Do While Selection.MoveRight = 1
Windows("data.docx").Activate
Selection.Find.Text = "审核人:"
Selection.Find.Execute
If Selection.Find.Found Then
Selection.EndKey unit:=wdLine, Extend:=wdExtend
Selection.Copy
Else: Selection.EndKey unit:=wdStory
End If
Windows("output.docx").Activate
Selection.Paste
Windows("data.docx").Activate
Loop
End Sub

操作方法:同时打开data.docx和output.docx,一个是日志的数据文件,一个空白文档用来输出结果的。创建一个宏,把代码粘进去,运行一下。然后计算机就balabala的给你输出结果了。

算法其实也挺简单,第一要控制两个文档的来回切换,第二要控制查找的循环,第三要控制光标的选择范围