vba - VBA单词: I would like to find a phrase,选择其前面的单词,并以斜体显示文本

标签 vba ms-word

我在使用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

最佳答案

以下代码将执行您想要的操作。但是,我以我认为可以使您最好地理解它的方式编写它。

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,与所有范围一样,它都有一个Start(第一个字节)和一个End(最后一个字节。StartEnd是用数字表示的Range的属性,从第一个字节开始计数。我的代码创建了一个新的Range对象(称为Rng。Selection.Range)已分配给该新对象,此时RngSelection.Range是相同的,但是当您操作Rng对象时,Selection.Range不会改变。

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

因此,返回到ActiveDocument.RangeRng的一部分,现在我们将Start属性向左移动两个词。正数会将其向右移2个字。不需要Extend,因为命令非常清楚:“Move Start”(移动开始),这意味着End保留在原处。

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

关于vba - VBA单词: I would like to find a phrase,选择其前面的单词,并以斜体显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284752/

相关文章:

PowerPoint 中功能区的 VBA 仅在使用 SaveAs/SaveCopyAs 后工作一次

Excel VBA : Working with iFrame via IE Automation

excel - 使用 GetText 从剪贴板获取文本 - 避免空剪贴板上出现错误

vba - 有没有办法只在启用宏的情况下显示 word 文件的内容?

vba - 如何通过VBA宏遍历Word文档中的文本

vba - 使用起始单元格地址和结束单元格地址从同一张表中获取范围

ms-access - 每 30 分钟运行一次代码的计时器

python - 使用 Python 将 .doc 转换为纯文本

php - opentbs同时合并Word文档表中的2行

java - 使用 java 以编程方式突出显示 MS Word 中的文本