0

我有一个规范文档,我在其中编写了一个 VBA 宏,它可以在自身的两个视图之间“切换”。写出的逻辑语句如下:

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

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

如果 intro1 = 2,则跳到 home1

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

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

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

4

1 回答 1

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").Value = "Q.1" .Item("v1").Value = "intro1" .Item("q2").Value = "Q.3" .Item( "v2").Value = "home1" ' 我们将使用这个来切换名称 .Item("qv").Value = "q" End With

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

{ 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

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

于 2013-10-23T17:20:00.953 回答