如何用vba查找替换word文档中的英文引号为空,而不包含中文引号?

当word 文档中即有英文引号也有中文引号,当用查找替换查找英文引号替换为空时,会把中文引号也一起替换。

这时候我们可以借助word查找替换中可以直接按照unicode编码查找字符的功能,将英文引号的unicode编码找出来,然后再在查找框中输入形如”^uXXXX”这样的查找内容,只查找英文的引号。

要找到某个字符的unicode编码,一种方法是在word中选中该字符,然后按下Alt+X组合快捷键,即可显示该字符的unicode编码。但是,在这里显示出的unicode编码并非为准确的unicode编码。

另一种方法是用vba代码获取字符的unicode编码,为了避免复制粘贴字符导致的字符歧义,可以直接用以下的vba代码逐字符输出字符的unicode编码。

Sub QQ1722187970()
    Dim oRng As Range
    Dim oDoc As Document
    Set oDoc = Word.ActiveDocument
    Set oRng = oDoc.Content
    For i = 0 To oRng.End - 1
        sText = oDoc.Range(i, i + 1).Text
        '输出字符及其对应的字符编码
        Debug.Print sText, AscW(sText)
    Next i
End Sub

然后可以在立即窗口中看到输出的字符以及字符对应的字符编码,这里英文字符的字符编码为0034,所以可以在查找窗口中输入“^u0034”进行查找替换,就只会替换英文字符,不会替换中文字符了。

当然,也可以通过以下的vba代码进行查找替换:

Sub QQ1722187970()
    Const wdReplaceAll = 2
    Dim oRng As Range
    Dim oRng1 As Range
    Set oRng = Word.Selection.Range
    '先判断是否有选中区域,没有选中则表示整个文档
    If oRng.Start = oRng.End Then
        Set oRng = Word.ActiveDocument.Content
    End If
    '获取要执行操作的区域的起点和终点,用于查找替换时判断是否超出了选定区域
    iStart = oRng.Start
    iEnd = oRng.End
    Set oRng1 = oRng
    With oRng1.Find
        .Execute FindText:="^u0034", ReplaceWith:="", Replace:=wdReplaceAll
    End With
End Sub
       

发表评论