WordVBA:半角字符转为全角字符(结合查找方法)

您所在的位置:网站首页 如何使用word半角变全角模式 WordVBA:半角字符转为全角字符(结合查找方法)

WordVBA:半角字符转为全角字符(结合查找方法)

2024-07-13 18:59| 来源: 网络整理| 查看: 265

目  录

一、应用场景

二、推荐的手动操作步骤

(一)打开Word【查找替换】对话框的【查找】选项,输入相应匹配模式

(二)第(一)步完成,符合匹配模式的地方就被选中了

(三)点击【字体】-【转换】选项-【全角】,即可完成转换

(四)手工操作完成,效果如下

 三、VBA程序代码示例(有详细注释)

一、应用场景

一般在排版要求比较严格的中文文档时,包括各种括号在内的标点要求区分好中英文标点(更准确即全半角标点)。有的文档既有中文又有英文(如英文摘要等等),还不能通篇全选一次性操作完成。针对这些问题如果用VBA进行自动化操作,就需要了解Word通配符查找一些运用方法和技巧。

二、推荐的手动操作步骤 (一)打开Word【查找替换】对话框的【查找】选项,输入相应匹配模式

例如:

查找:[,;:\(\)\?\!""“”。]

勾选【使用通配符】

如果事先选择了有效范围,可点击【在以下项中查找】-【当前所选内容】;否则可选【主文档】(对所有文档内容进行匹配)

注意:如果要查找英文括号“(”需要进行相应转义,即“\(”,可自行了解详细内容。

(二)第(一)步完成,符合匹配模式的地方就被选中了

 注意:在VBA代码执行中,是不会选中的。(可以实现此功能,但用了编程思路就不推荐此方法,因为如果数据量过大,会非常卡顿;另外,全选原本也是给手工操作准备的)

(三)点击【字体】-【转换】选项-【全角】,即可完成转换

(四)手工操作完成,效果如下

 三、VBA程序代码示例(有详细注释) Sub 半角转全角() Dim fw As Range '此变量确定需要将半角字符替换成全角字符的文档范围 Dim ks As Long 'ks和js分别表示需要查找范围的开始和结束字符的下标 Dim js As Long Dim s As String 's用于放需要被替换的(多个)段落样式名字符串(之间以“、”连接) Dim arr 'arr用于存放s被“、”分割后的数组(即s中的每一个样式名) Dim sty 'sty是循环遍历arr中的每一个元素(样式名) Dim i As Long, j As Long Rem 确定操作范围,默认是所选区域 Set fw = Selection.Range Rem 如果所选区域长度为0,即未选择有效区域,则将范围确定为整个当前文档区域 If fw.Start = fw.End Then Set fw = ActiveDocument.Range Application.ScreenUpdating = False '关闭屏幕刷新,尽可能提高执行效率 ks = fw.Start: js = fw.End '将所确定范围的开始和结束位置赋值给两个变量,方便后面约束程序执行范围 Rem 用户输入需要对所选区域执行操作的文字的样式(可以是多个,因为文档英文部分通常不用转成全角,一般提前用不同样式区分好) s = InputBox("请输入需要半角转全角的样式,中间【、】分隔:", "半角转全角", "摘要内容、正文1、正文 致谢") arr = Split(s, "、") '样式分割赋值给数组arr On Error Resume Next '防止出错(如样式名写错导致的错误),避免程序中断 For Each sty In arr '遍历上面数组的每个样式名 With fw.Find '用Word里的查找功能进行替换操作,但不是直接用替换功能,因为全半角比较特殊,直接替换并不能完成很多操作 .ClearFormatting '清空查找框格式 .Forward = True '向下查找 .Wrap = wdFindContinue '查找文本循环需要选此循环模式(查找了一个继续下一个,但选定区域查找完成后,区域外的其他部分也会被查找,所以需要注意下面范围限定条件);如果不用此模式,每次执行程序只会替换一处(亲自反复测试证明;然而当仅查格式如粗体或高亮时不指定也行) .MatchWildcards = True '开户通配符查找模式(可以一次查找多种可能性,节约时间,提高效率,减少代码) .Style = ActiveDocument.Styles(sty) '查找框里限定样式 .Text = "[,:;""“”\(\)\?\!" & ChrW(-156) & ChrW(-159) & "]" '查找的字符串(如半角的句号、逗号、问题、括号等,根据自己的需要确定;注意特殊字符需要转义) Do While .Execute() = True And fw.Start >= ks And fw.End = ks And fw.End】将执行范围确定在所选范围,表示查找到符合要求的字符(串)的开始位置在事先所确定的查找范围的开头后面(包含) 且 该字符(串)的结位置在范围结束位置的前面,即只对事先确定范围内符合要求的字符(串)执行操作 '如果满足上述两组条件或三个条件,用Do While...Loop方法循环继续操作 i = fw.Start '查找到内容的开始位置 fw.CharacterWidth = wdWidthFullWidth '将查找到的字符(串)用Word【字体】选项卡的【全半角】功能里的转全角方法,将找到的字符(串)转换为全角格式 If j >= i Then Exit Do 'j记录上一次i(查找到的开始位置),因为向下查找,如果j的位置在i后面,说明已经从头循环完一遍,此时应该退出Do循环 j = i '这次查找的位置赋值给j,方便下次和最新查找的位置对比大小关系(位置关系) Loop End With Next On Error GoTo 0 Application.ScreenUpdating = True '执行完成,打开屏幕刷新 Set fw = Nothing End Sub


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3