【问题标题】:VBA Word: I would like to find a phrase, select the words before it, and italicise the textVBA Word:我想找一个词组,选择它前面的词,并将文本斜体
【发布时间】:2017-04-07 18:21:48
【问题描述】:

我在使用 VBA 命令查找某个短语时遇到问题,然后选择它之前的 1 或 2 个单词,然后将整个内容变为斜体。

我可以相互独立地使用Selection.FindFont.ItalicisewdExtend 命令,但是当我将它们组合起来执行此任务时,宏就会崩溃。有什么帮助吗?

Selection.Find.ClearFormatting
 With Selection.Find
     .Text = "Michael"
     .Replacement.Text = "Michael"
     .Forward = True
     .Wrap = wdFindStop
     Do While .Execute() = True
         Selection.TypeParagraph
         Selection.MoveLeft Unit:=wdWord, Count:=2, Extend:=wdExtend
         Selection.Find.Replacement.Font.Italic = True
         Selection.Font.Bold = True
         Selection.Collapse Direction:=wdCollapseEnd
     Loop
 End With

【问题讨论】:

标签: vba ms-word


【解决方案1】:

下面的代码会做你想做的事。但是,我以我认为最能让您理解它的方式编写它。

Private Sub SelFind()
    ' 08 Apr 2017

    Dim Rng As Range
    Dim Fnd As Boolean

    Set Rng = Selection.Range
    With Rng.Find
        .ClearFormatting
        .Execute FindText:="Michael", Forward:=True, _
                 Format:=False, Wrap:=wdFindStop
        Fnd = .Found
    End With

    If Fnd = True Then
        With Rng
            .MoveStart wdWord, -2
            With .Font
                .Italic = True
                .Bold = True
            End With
        End With
    End If
End Sub

首先想象文档中的所有字符都串成一行,其中穿插着也被视为字符的格式代码。这一长串字符称为范围,代码为ActiveDocument.Range

您可以选择文档整个范围的任何部分。那将是Selection.Range,与所有范围一样,它有一个开始(第一个字节)和一个结束(最后一个字节。StartEnd 是由数字表示的Range 的属性,从第一个字节。我的代码创建了一个名为 Rng 的新 Range 对象。将 Selection.Range 分配给该新对象。RngSelection.Range 在这一点上是相同的,但是当您操作 Rng 对象时, Selection.Range 不会改变。

代码现在在Rng 对象中查找“Michael”。您设置搜索的语法非常完美。我使用了不同的语法,因为我发现它更容易掌握。如果搜索成功,.Found 属性将返回 True。在这种情况下,搜索范围将更改为仅包括找到的子范围。如果在Selection.Range 中进行搜索,您会在屏幕上看到突出显示的“Michael”。但由于搜索是在内存中进行的(在 Rng 对象上),Selection.Range 保持不变,而 Rng 对象现在只包含单词“Michael”。

所以,回到ActiveDocument.RangeRng 是其中的一部分,我们现在将Start 属性向左移动两个单词。正数会将其向右移动 2 个单词。不需要Extend,因为命令非常明确:“移动开始”,意味着结束保持在原处。

现在,Rng 对象在“Michael”之前的 2 个单词开始,并以“Michael”这个单词结尾。您可以复制此范围或将其删除,或根据需要进行修改。请记住,您的屏幕仍显示原始的Selection.Range。 MS Word 不允许您分配Set Selection.Range = Rng,但有一种更简单的方法可以将显示与代码所做的重新对齐。通过在修改字体后(外部End With之前)添加行.Select,修改后的Rng将成为Selection。

【讨论】:

  • 非常感谢,这很有帮助和教育意义。
猜你喜欢
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多