VBA条件查找和替换MS Word

时间:2013-10-23 00:19:42

标签: replace ms-word

我有一个spec文档,其中我编写了一个VBA宏,在其自身的两个视图之间“切换”。有一些逻辑陈述写出:

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

客户端使用问题编号检查逻辑,程序员通过变量名读取逻辑。

如果intro1 = 2,则跳至home1

我创建了两个彼此对应的数组来执行查找替换,以便可以在显示问号和变量之间来回切换。

当然,全面的解决方案绝非易事。当然,如果文档中有任何指示我希望“免除”被发现和替换。

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

1 个答案:

答案 0 :(得分:1)

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

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  .Item(“q1”)。值=“Q.1”  .Item(“v1”)。Value =“intro1”  .Item(“q2”)。值=“Q.3”  .Item(“v2”)。Value =“home1” '我们将用这个来切换名字  .Item(“qv”)。Value =“q”

结束

对于每个数字/变量,插入一个像这样的嵌套字段

{ DOCVARIABLE "{ DOCVARIABLE qv }{ SEQ q }" }

All {}需要是可以使用ctrl-F9在Windows Word中插入的特殊字段括号字符。

然后使用

ActiveDocument.Variables("qv").Value = "q" 
ActiveDocument.Fields.Update

显示数字和

ActiveDocument.Variables("qv").Value = "v" 
ActiveDocument.Fields.Update

显示名称。在这种情况下,用户将能够看到您可能不想要的字段代码。

相关问题