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

目  录

一、应用场景

二、推荐的手动操作步骤

(一)打开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 <= js
            '【.Execute() = True】表示查找到了
            '重要:【And fw.Start >= 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
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VBA-守候

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值