Replace VBA条件查找和替换MS Word

Replace VBA条件查找和替换MS Word,replace,ms-word,Replace,Ms Word,我有一个规范文档,其中我编写了一个VBA宏,用于在两个视图之间“切换”。有这样的逻辑语句: 如果Q.1=2,则跳到Q.3 客户机用问题编号检查逻辑,程序员用变量名通读逻辑 如果intro1=2,则跳到home1 我创建了两个相互对应的数组来执行查找替换,这样就可以在显示问题编号和变量之间来回切换 当然,一个全面的解决方案绝非易事。当然,如果文件中有任何说明,我希望“豁免”被发现和替换 所以现在我想我需要做的不是查找并替换所有内容,而是执行“查找下一步”并根据字体或字体大小评估找到的内容,以确定是

我有一个规范文档,其中我编写了一个VBA宏,用于在两个视图之间“切换”。有这样的逻辑语句:

如果Q.1=2,则跳到Q.3

客户机用问题编号检查逻辑,程序员用变量名通读逻辑

如果intro1=2,则跳到home1

我创建了两个相互对应的数组来执行查找替换,这样就可以在显示问题编号和变量之间来回切换

当然,一个全面的解决方案绝非易事。当然,如果文件中有任何说明,我希望“豁免”被发现和替换


所以现在我想我需要做的不是查找并替换所有内容,而是执行“查找下一步”并根据字体或字体大小评估找到的内容,以确定是否应该替换。VBA中是否有返回的对象,在执行“查找”时可以访问该对象,我可以检查其属性?基本上,我能够区分字体大小来决定是否应该替换它。

可能有很多方法可以做到这一点。就代码而言,如果将范围设置为ActiveDocument.range,然后使用该范围的.Find对象,Word应依次返回“覆盖”找到的文本的范围对象。根据您对文档内容的控制程度,可以轻松标记要查找的文本的一种方法是创建字符样式并将其应用于所有这些文本。然后你可以这样做:

Sub multipleFIndsUsingAStyle()
Dim rng As Range
Set rng = ActiveDocument.Range
With rng.Find
  .Text = ""
  ' Create a style called findStyle and
  ' apply it to the texts you want to find
  .Style = "findStyle"
  .Forward = True
  .Execute
  While .Found
    Debug.Print rng.Start, rng.End
    .Execute
  Wend
End With
Set rng = Nothing
End Sub
您可以使用两种完全不同的方法。一种方法是使用字段沿以下行插入两个备选文本(有几种方法):

使用VBA创建名为q1、v1、q2、v2等的文档变量,其值为Q.1、intro1、Q.3、home1等,如下所示

使用ActiveDocument.Variables .项目(“q1”).Value=“Q.1” .Item(“v1”).Value=“intro1” .Item(“q2”).Value=“Q.3” .Item(“v2”).Value=“home1” '我们将使用此选项切换名称 .Item(“qv”).Value=“q” 以

对于每个数字/变量,插入一个嵌套字段,如下所示

{ DOCVARIABLE "{ DOCVARIABLE qv }{ SEQ q }" }
(所有{}必须是可以使用ctrl-F9在Windows Word中插入的特殊字段大括号字符)

然后使用

ActiveDocument.Variables("qv").Value = "q" 
ActiveDocument.Fields.Update
显示数字和

ActiveDocument.Variables("qv").Value = "v" 
ActiveDocument.Fields.Update
显示名称。在这种情况下,用户将能够看到您可能不想要的字段代码