Word VBA:结合网友的自定义函数对汉字批量增 / 删拼音
一、已有方法
1.Word中有对汉字加拼音的方法——拼音指南

通过这种方法手动加拼音是有字符串长度的限制的,因此很多网友基于此也写过VBA自动化批量添加拼音的方法。

2.常规方法的不足——耗时太长
此文法当然可用,存在的不足也非常明显,因为需要用sendkeys方法,模拟键盘操作,所以非常耗时。
我们对下面这段测试文本,用此方法加拼音,来测试一下耗时情况:
视频提供了功能强大的方法帮助您证明您的观点。当您单击联机视频时,可以在想要添加的视频的嵌入代码中进行粘贴。您也可以键入一个关键字以联机搜索最适合您的文档的视频。

可以看到耗时25.305秒。这个代码是非常耗时的,一页通用A4纸至少有这段文字的4-5倍多,也就是说,完成一页汉字加拼音,至少是100-125秒。那么对于多页甚至多份文档来说,此方法速度可能就不能满足我们的需求了。
除此之外,此方法很难设置拼音的对齐方式、字体、字号、位置等各项参数,基本只能使用默认值。
二、新的思路
1.思路
可以运用汉字与拼音的映射关系,自己写一个函数,然后对我们要处理的汉字可以立刻找到对应的拼音。然后用Word VBA中的拼音指南方法Range.PhoneticGuide方法进行加拼音。
这种方法不用模拟键盘,每个汉字发送一次,所以运行速度上有非常大的提升。
因为具体的方法中又有多种方法(后面代码中举例了2种,可见详情),那么我们同样用前面测试的文字进行一下测试:
(1)调用函数但未用正则

耗时约0.188-0.19秒,速度快了许多。
(2)调用函数且用正则方法

耗时约0.156秒,速度更快。
可以看到用新的自定义函数获取拼音,用正则优化速度,都可以加快代码运行速度,可以满足一般的办公自动化需求。
2.示例代码
三、说明
1.上述完整代码中,第一部分——函数部分并非本人原创,是网友中的大佬提供的,非常感谢大佬分享。主要就是根据汉字与拼音的映射关系获取汉字的拼音。
2.如果使用正则,速度确实相当快,但是最好是在纯文本文档中使用;如果在有各种形状、图片、表格、域等复杂对象的文档中,不建议使用,因为有可能出现某些错误。后面有时间再和大家分享可能的错误。
3.代码中删除拼音指南也提供了两种方法,可以看相应批注和测试。
4.对于多音字,还是需要人工校对,虽然自定义函数可以获取多音字的多个读音,但精确匹配,需要代码量就更大,所以本文没有进行进一步处理。
5.这些方法都不一定是最优解,如果有更好的方法,也欢迎大家多多分享,共同探讨。
如果您有VBA/Office/办公自动化问题,欢迎提问和一起交流。