
内容提要:标题详细介绍word内置命令和VBA编写宏两种方式来实现标点符号之间的半角和全角相互转换。
第一,使用word内置的全半角转换
word中全角的标点符号占两个字节,全角的标点符号占一个字节。
在word2010版提供了包含标点符号、小写、数字综合性的半角半角转换。单击开始——更改大小写命令下面的“全角和半角”,如下图所示:
但此集成系统有一个局限是,所以一个文档同时有数字、小写和标点符号混合,可能用起来,就没有预期想要的作用。
比如笔者常常需要处理网上的一些信息,通常是掺杂参合一些全角半角的标点符号全角半角转换工具,为了让整篇文件的标点符号统一为半角或者是统一为全角,就需要进行切换。
很多朋友的第一想法就是使用word内置的系统,查找替换完成。其实这个办法也有良好的,只是相对烦琐一点。所有的标点符号差不多有27种左右,所以每种标点符号都需要处理一次,就需要进行27次查找替换。
本文的最终目的是想介绍一个批量转换标点符号的宏来实现全半角转换。
第二,全角标点符号批量转换为全角标点符号
操作方法如下:
1.在word中,按ALT+F11组合键全角半角转换工具,打开VBE编辑器,单击插入——系统,在前面的源码编辑窗口复制上面的源码,并关掉VBE。
2.来到word编辑界面,选中需要转换的区域,然后单击开发工具——宏(如果按ALT+F8键),打开“宏”对话框,选中“半角转换为全角”宏,单击“运行”指令,即可一次性将选中区域的半角标点符号批量转换为全角标点符号。
上面是详细的VBA代码,直接复制粘贴sub 至end sub结束的一切源码。
Sub 全角转换为全角()
'使用前需先选中要替换的区域
Dim fullshape, halfshape As String, i As Integer '概念fullshape(全角)、halfshape(半角)为字符串型,i为整数型

fullshape = ",。?“”‘’!:;"
halfshape = ",.?""''!:;"
For i = 1 To 10 '循环10次
With Selection.Find
.Text = Mid(fullshape, i, 1) 'mid函数:前往文本字符串中从指定位置开始的特殊数量的符号,每次取一个标点符号
.Replacement.Text = Mid(halfshape, i, 1) '将用来替换的对应位置的全角标点符号
.Format = False '保存替换前的字符格式
.Execute Replace:=wdReplaceAll '用全角逗号替换全角标点
End With
Next i
End Sub
第三,全角标点符号批量转换为半角标点符号
操作方法如下:
1.在word中,按ALT+F11组合键,打开VBE编辑器,单击插入——系统,在前面的源码编辑窗口复制上面的源码,并关掉VBE。
2.来到word,按ALT+F8键,打开“宏”对话框,选中“全角标点符号转换为半角标点符号”宏,单击“运行”指令,即可一次性将所有的全角标点符号转换为半角标点符号。
Sub 半角标点符号转换为半角标点符号()

'中英互译文档中将中文句子中的中文标点符号替换为英文标点符号
Dim i As Paragraph, ChineseInterpunction() As Variant, EnglishInterpunction() As Variant
Dim MyRange As Range, N As Byte
'定义一个中文标点的数组对象
ChineseInterpunction = Array("。", ",", ";", ":", "?", "!", "……", "—", "~", "〔", "〕", "《", "》", "‘", "’", "“", "”")
'定义一个英文逗号的数组对象
EnglishInterpunction = Array(".", ",", ";", ":", "?", "!", "…", "-", "~", "(", ")", "", "'", "'", """", """")
On Error Resume Next
Application.ScreenUpdating = False '关闭萤幕更新
For Each i In ThisDocument.Paragraphs '遍历文件每个句子
If Asc(i.Range)
'定义一个RANGE对象
For N = To 13 '进行14次循环
Set MyRange = i.Range '定义一个RANGE对象
With MyRange.Find '查找

.ClearFormatting '清除查找文档
'查找相应的中文逗号,替换为对应的英文标点
.Execute findtext:=EnglishInterpunction(N), replacewith:=ChineseInterpunction(N), Replace:=wdReplaceAll
End With
Next
End If
Next
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting '清除查找文档
.Text = """" '查找"
'或者查找成功不仅在英文句子中,分别将其替换为“/”
While .Execute
If Asc(Selection.Paragraphs(1).Range)
If .Execute And Asc(Selection.Paragraphs(1).Range)

Wend
End With
Selection.HomeKey wdStory
With Selection.Find
.ClearFormatting '清除查找文档
.Text = "'" '查找'
While .Execute
'或者查找成功不仅在英文句子中,分别将其替换为‘/’
If Asc(Selection.Paragraphs(1).Range)
If .Execute And Asc(Selection.Paragraphs(1).Range)
Wend
End With
'恢复屏幕更新
Application.ScreenUpdating = True
End Sub
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-119021-1.html
中国在二十年內都还没这能力