IT民工一枚,为学弟学妹造福是我一直写博文的动力!为媳妇提供技术支持是我学习新技术的动力!为自己脱离贫困线,买到心仪的摩托车,有饭吃,有床睡,有妹把,笔耕不辍~~
2013年(54)
分类: Windows平台
2013-04-22 19:36:29
包含Word在内的Office办公软件都为用户提供了宏的功能,且不必赘述它的好处和特色功能,相信读者最关心的问题是:宏能做帮我什么?笔者根据自己使用宏的经验,用一句话概括:只要在Word中涉及大量简单的重复操作,肯定可以使用宏快速地完成。
一、处理不正确换行的小实例
首先我们先来看一个简单的、与本地化关系不大的小例子。当我们将pdf中的文本直接复制粘贴到Word中时,可能出现的问题是,粘贴过来的文本在不应该换行的地方出现了换行。例如,以下文本是某pdf文档中的一段。
将它粘贴到word后,不作任何处理的结果如下:
显然,粘贴过来的文本在不应该换行的地方出现了大量的回车符,一种本能的办法是逐个删除,但这只适用于文本量不大的情况,如果处理的文档有几十页甚至几百页,效率显然十分低下。
现在有一种可行的解决办法的思路如下:
现在得到的文本的分段就是正常的了。细心的读者发现,这样只是将“句号加换行”视作了段落结束,事实上也有可能是下引号、感叹号或者问号结尾的段落。于是我们在23步之间插入以下操作,本质是在重复2的步骤:
2.现在文中只有软回车了,将文中所有的“句号+软回车”替换成“句号+硬回车”,此步是为了将“真正是段落结束”的地方区别开。
2.1将文中所有的“下引号+软回车”替换成“下引号+硬回车”。
2.2将文中所有的“问号+软回车”替换成“问号+硬回车”。
2.3将文中所有的“感叹号+软回车”替换成“感叹号+硬回车”。
…...(引处还可补充其它可能的情况,比如英语标点的句号、问号等标点作为段落结尾)
貌似问题解决了。不管处理多长的文档,只要按部就班地将上面的几步操作一做,就可以完成这个文档的处理了。但另外一种可能的情况是,有大量这样的文档。如果没有宏的话,可能的情况就是我们一个一个地打开文档,对每一个文档都重复操作上面的若干步骤。所以,还是那句话:只要有重复操作的地方,就可以利用宏。
二、利用宏处理不正确的换行
下面我们以Word 07为例,看看如何用宏完成这些操作。对于大部分的宏用户而言,不清楚具体宏代码的语法等内容可能是最大的障碍,我们也没有必要去学习VBA编程语言去掌握宏的每一个语法细节。建议一般用户以录制宏为主,以修改宏为辅。
第一步,单击视图-宏菜单下的“录制宏”命令。
第二步,指定宏的名称和备注。这里有两个重要选项。用户可以指定生成一个按键,或者指定一组快捷键,调用此宏时更加便利。保存位置默认即可,保存在所有文档(Normal.dotm)中。
第三步,单击上图中的确定后,光标变成了类似磁带的图标。90后的朋友可能不知道什么是磁带,呵呵。注意此时处在了录制宏的过程中,所有操作都会被纪录下来,但是鼠标只能用来单击菜单按钮,却不能用来在文本中定位,只能通过键盘移动文本中的光标。
第四步,开始上文提到的一系列替换操作。(即先将“^p”换成“^l” ,然后将“。^l”换成“。^p”,将“!^l”换成“!^p”,将“?^l”换成“?^p”, 将“”^l”换成“”^p”等等,视情况而定,最后将“^l”换成“^p”。)
其中^p代表硬回车,^l(字母L的小写形式)代表软回车。
第五步,完成上面的操作后,单击视图-宏菜单下的停止录制即可。
现在,我们完成了这个宏的录制,单击Alt+F8,找到刚才录制的宏,单击运行即可。
以上就是如何录制宏的一个简单实例,需要说明的一点是,根据这个例子的情况录制的宏并不适用于所有的情况,比如本例默认认为,只要是标点集中的标点(本例中是!。?和!)加换行才是真换行,只要不是这样的换行都视作假换行需要处理。这不一定是正确的。比如可能某个标题,显然标题不太可能以标点结尾,用本宏处理的结果就是把标题后面的回车删了,与正文直接连在了一起。有兴趣的读者可以自己想想如何改进本宏,使其也具备处理这种可能情况的能力。提示:WORD的查找功能可以查找带格式的文本。
看了上面的小例子,相信读者能够感觉到,其实使用宏能否给自己带来方便的决定因素并不在于对VBA有多少了解,而是一种解决问题的思路是否能够打开。
三、利用宏将php文件处理成方便Trados翻译的文件
下面我们结合本地化工程文件处理中利用宏的一个实例,进一步看看宏的作用。在做网站本地化时,可能要处理到PHP格式的文件,其中部分内容如下:
我们希望将文件中的字符串汉化,首先要对它们进行标记。因为Trados 2007在进行翻译的时候,会自动跳过tw4winExternal格式的部分。所以下面要做的是将文本中的非翻译部分的格式标记为tw4winExternal。
通过观察不难发现,从='前面直到本行首的内容和最后的';都是需要标记的文本。开始录制宏后,具体的方法如下:
1.查找=',查找到第一个后,关闭查找对话框。
2.按一下键盘上的“向右箭头”,然后按下Shift+Home组合键,选中从'符号到本行行首。
3.单击样式下拉菜单中的tw4winExternal样式。
4.按一下Ctrl+向下箭头,将光标定位到下一行。
5.以上1-4步视作第一个单元操作
6.查找';,查找到第一个后,关闭查找对话框。
7.按一下键盘上的“向左箭头”,然后按下Shift+End组合键,选中从'符号到本行行尾。
8.单击样式下拉菜单中的tw4winExternal样式。
9.按右向箭头(因为此时已经选中段尾),将光标定位到下一行。
10.以上6-10步视作第二个单元操作。
11.完成录制。但操作还没有结束,因为刚才的修改只是对某一行进行了标记,我们还要直接编辑源代码,加入一个循环语句,才能处理整个文本内容。
12.在运行宏的窗口中选中刚才录制的宏,单击编辑。对照下图,红色框内为手动添加的内容。
简单解释如下:
我们录制的1-4步,可以视作单元操作,目的是查找到某一行要标记的文本然后进行标记,并转到下一行。转到下一行之后操作就停止了,所以需要有一个语句告诉WORD应该继续查找。那就是如下的循环语句:
ParaNum = ActiveDocument.Paragraphs.Count
For i = 1 To ParaNum
//单元操作
Next i
我们将单元操作的代码如上所示调整好。WORD自动计算出当前文档的段落总数,将这个数值放在ParaNum变量中,然后变量i从1开始自加,每自加一次,都执行一次单元操作,所以有多少段,我们就进行了多少次1-4步的重复操作,所以将全部文档中的’=前的内容标记完毕。同理,6-10步也是单元操作,我们也对这块的代码套上了一个循环。修改完成后,只要运行这个宏,便可以轻松地批量完成样式的标记了。