Excel VBA在word中查找和替换。将数字和单词之间的空格替换为不间断空格

Excel VBA在word中查找和替换。将数字和单词之间的空格替换为不间断空格,excel,vba,search,replace,ms-word,Excel,Vba,Search,Replace,Ms Word,我希望你能帮助我。 我有三个问题: 在下面的代码中,我试图用“\1^s\3”替换“([0-9])()([A-Za-zÆèèèèè”)但结果总是以\1\3^2结尾,或者示例“3A”将变为“3A(不间断空间)”,但我想要的是“3(不间断空间)A” 我有没有办法把([A-Za-zÆæØå])变成一个动态的词?我有一个我想用的单词列表。例如“3毫克”至“3毫克(非破损空间)或“1公斤”至“1公斤(非破损空间) 是否有任何方法可以进行搜索和替换,其中我只将“空格”替换为“非中断空格”,而不是通配符。上面的

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

  • 在下面的代码中,我试图用“\1^s\3”替换“([0-9])()([A-Za-zÆèèèèè”)但结果总是以\1\3^2结尾,或者示例“3A”将变为“3A(不间断空间)”,但我想要的是“3(不间断空间)A”
  • 我有没有办法把([A-Za-zÆæØå])变成一个动态的词?我有一个我想用的单词列表。例如“3毫克”至“3毫克(非破损空间)或“1公斤”至“1公斤(非破损空间)
  • 是否有任何方法可以进行搜索和替换,其中我只将“空格”替换为“非中断空格”,而不是通配符。上面的解决方案将导致通配符被自己替换,这通常不是问题,但由于我是在一个文档中这样做的,它将是可见的
  • ^s是不间断空格,而不是^2。通过查看Word中“高级查找”对话框中的文本,可以轻松找到所需的符号
  • 只需将通配符替换为包含要查找的单词的变量。您需要对每个单词进行单独的搜索
  • 是的,但您将无法使用“替换”。您需要编写代码来处理找到的每个匹配项。有许多例子说明了如何在SO上执行此操作,例如

  • 亲爱的蒂莫西,非常感谢你抽出时间来看看我的问题。对于问题1,我已将替换项改为“\1^2\3”,但我遇到了相同的问题。如果我在“3A”上使用代码,它将变成“3A(不间断空格)”,但我想要的是“3(不间断空格)A”。@Casper-我建议你重新阅读我答案的第1点。哦,对不起,我的意思是“\1^s\2”。现在,我的完整搜索和替换代码是:对于wordDoc.StoryRanges中的每个myStoryRange,使用myStoryRange.Find.MatchCase=True.MatchWholeWord=True.MatchWildcards=True.Text=“[0-9])([A-Za-zÆØå]).Forward=True.MatchAllWordForms=False.MatchSoundsLike=False.Replacement.Text=“\1^s\3”。执行Replace:=wdReplaceAll以Next结尾myStoryRange@Casper-我在O365中进行了测试,效果非常好。但是我不使用音轨变换,所以这可能是你问题的原因。非常感谢Timothy Rylatt的帮助,一定是你说的音轨变换。如果我在“3E”上测试“\1AAA\3”,我会得到“3eAAA”;“\1AAAA\3”给出结果“3eAAA”;“\1AAAA\3”得到结果“3AeAAA”。不知道我能用它做什么,但很奇怪。我必须支持你在第三章中提出的解决方案。
    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