首页 > 解决方案 > VBA 在 word 中查找和替换。用数字和单词之间的不间断空格替换空格

问题描述

我希望你能帮助我。我有三个问题:

  1. 在下面的编码中,我试图用“\1^s\3”替换“([0-9])()([A-Za-zÆæØøÅå])”,但结果总是以 \1\3^ 结尾2或例如“3 A”将变为“3A(不间断空格)”,但我想要的是“3(不间断空格)A”。
  2. 有什么办法可以让 ([A-Za-zÆæØøÅå]) 变成一个动态词?我有一个我想使用的单词列表。例如“3 mg”到“3(不间断空间)mg”或“1 kg”到“1(不间断空间)kilo”。
  3. 有什么办法可以进行搜索和替换,我只用“不间断空格”而不是通配符替换“空格”。上述解决方案将导致通配符被自己替换,这通常不是问题,但由于我在跟踪更改的文档中执行此操作,因此它是可见的。
Sub NonBreakingSpace(ByVal wordApp As Object, ByVal wordDoc As Object, ByVal myStoryRange As Object)


'With Worksheets("sheet1")
'For Each cell In Range("A3:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
   ' Find1 = cell.Value
   ' Replace1 = cell.Offset(0, 1).Value
    
    For Each myStoryRange In wordDoc.StoryRanges
          With myStoryRange.Find
            .MatchCase = True
            .MatchWholeWord = True
            .MatchWildcards = True
            .Text = "([0-9])( )([A-Za-zÆæØøÅå])"
            .Forward = True
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .Replacement.Text = "\1^2\3"
            .Execute Replace:=wdReplaceAll
    End With
    Next myStoryRange
'Next cell
'End With
End Sub

标签: excelvbasearchreplacems-word

解决方案


  1. ^s 是一个不间断的空格,而不是 ^2。您可以通过查看 Word 中高级查找对话框中的文本轻松找到所需的符号。
  2. 只需将通配符替换为包含您要查找的单词的变量即可。您将需要对每个 Word 运行单独的搜索。
  3. 是的,但您将无法使用替换。您需要编写代码来处理找到的每个匹配项。有许多示例显示如何在 SO 上执行此操作,例如使用页码将包含某个关键字的字符串值从 Word doc 提取到 Excel

推荐阅读