设为首页收藏本站language 语言切换
查看: 1231|回复: 0
收起左侧

用VBA突破WORD查找替换功能

[复制链接]
发表于 2010-2-25 10:26:17 | 显示全部楼层 |阅读模式
<p >WORD提供了十分强大的查找和替换功能,但是,在日常办公中还会遇到许多该功能完成不了的工作。使用WORD的VBA编写少量的程序代码就可以突破这些限制,完成很多复杂的工作。<p >本文提供一个查找并替换数字的宏程序,用来完成复杂的数字查找和按一定规则替换数字的功能,简化WORD文档的编撰过程。下面介绍程序设计中需要考虑并克服的几个难点,最后给出源程序及其使用方法。该程序在WORD 2000下开发完成,经测试不能在WORD 97下正常运行。<p ><center><font color="#000099"><strong>问题的由来</strong></font></center><p >当需要将WORD文档中的一种单位制的数据转换成另一种单位制的数据时(如将市制或英制转换为公制),不仅要在文档中查找特定单位的数据,还需要用计算器按规则计算目标结果,并将其输入到文档中替换原来的值。如果只是处理少量的数据,这样的操作可以接受。但如果在文档中有几十个或成百上千个这样的数据或有多个同类文档,这个处理过程就会非常繁琐,而且容易出错。<p >我曾经有过一次这样的经历:一篇WORD文档中有3个十分复杂的表格,有几千个数据,所有的数据需要进行单位变换,开始的时候,我认为比较容易,只要把表格中的数据复制到EXCEL,按规则转换后再写回到WORD文档就可以了,不料由于表格过于复杂,当复制到EXCEL中后,数据面目全非,即使数据全部正确被转换,也很难在WORD中恢复数据的原貌,使本来貌似简单的工作变得异常复杂。<p >经常遇到这类情况使我决心用WORD的VBA来彻底解决这个问题。但是存在几个棘手的问题,例如选中数据的通用方法、按规则替换数据的方法、只对文档的特定部分进行操作等等。下面将介绍解决这些问题的基本思路。<p ><center><font color="#000099"><strong>选中数字的通用方法</strong></font></center><p >使用WORD的查找功能可以找到特定格式的数字,比如由一位整数和两位小数组成的数——2.34、3.45、5.34——可以使用通用数字格式"^#.^#^#"来查找,其中一个^#相当与一位数字(0-9)。如果你需要查找23.2、3.222、4.3、0.12这样的几个数字,只用WORD的查找功能,是很难用一个通用数字格式串找到它们的。那么如何找到它们呢?<p >首先它们的共同点是都有小数点,所以我们可以利用这一共性,查找"^#.^#"类型的数字,这样我们可以找到所有这样的数字。但WORD不会自动扩展性地选择整个数字,需要手动选择。这一过程可以程序化,让程序自动向前先后搜索,找到并选中整个数字,具体方法请参阅ExtendingSelection1()和ExtendingSelection2()两个过程。<p ><center><font color="#000099"><strong>按一定规律替换选中的数字</strong></font></center><p >当找到一个数字之后,需要根据特定的规则来替换它们,比如在华氏温度数据和摄氏温度数据之间转换时,其转换公式是:摄氏温度=(华氏温度-32)*5/9,这时就需要使用计算器根据当前值进行计算,然后输入计算结果。若一个一个地操作,实在是太乏味了,而且极易出错,那么如何处理呢?<p >在上一节中,我们讲用程序自动选中整个数字,那么这个选中的数字就是我们计算的起点,首先估计选中字符串的值,用给定的公式进行计算,根据指定的数值精度对其进行四舍五入,然后替换掉选中的字符串即可,这些工作由程序来完成是比较容易的,具体方法请参阅CalculateNReplace()过程。<p ><center><font color="#000099"><strong>替换文档的特定部分</strong></font></center><p >有时我们不希望对整个文档进行操作,而是对文档中的特定部分进行查找并替换操作。若使用WORD的查找并替换功能,只需要选中特定的文档部分即可。但是对VBA宏程序来说,存在一个小问题:WORD只允许一个文档拥有一个SELECTION对象,当程序在向前或向后扩展选中的数字时,该SELECTION对象即丢失。为了解决这个问题,我们需要创建一个临时文档,将选中的文档部分复制到新创建的文档中,然后对其执行上述的查找并按规则替换数字的功能,执行完毕再将整个文档放到WINDOWS的剪贴板,关闭该文档并回到原文档中,替换掉原文档中的选中部分。具体方法请参阅NewDoc()和ReplaceDoc()两个过程。<p ><center><font color="#000099"><strong>估计数学表达式的方法</strong></font></center><p >如果允许用户给输入参数指定一个数值表达式,在使用它们之前需要首先估计它们的值。这需要用到WORD的等式域(FORMULA或=)功能。首先将用户在对话窗体上输入的数值表达式提取出来,创建一个新文档,向文档写入一个相应的等式域来估计该表达式,选中域值文本,将其转换为对应的双精度数值,供程序使用,当所有的表达式都估计结束后,关闭该临时文档即可。具体方法请参见CalculateFormula()过程。这种方法比用程序直接解析数值表达式要来得直接和容易。                                 <p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-12 01:11 , Processed in 0.072498 second(s), 22 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表