作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用VBA命令查找某个短语,然后在其之前选择1个或2个单词,然后将整个内容斜体时遇到麻烦。
我可以彼此独立地使用Selection.Find
,Font.Italicise
和wdExtend
命令,但是当我将它们组合起来执行此任务时,宏就会崩溃。有什么帮助吗?
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(最后一个字节。
Start
和
End
是用数字表示的
Range
的属性,从第一个字节开始计数。我的代码创建了一个新的Range对象(称为Rng。Selection.Range)已分配给该新对象,此时
Rng
和
Selection.Range
是相同的,但是当您操作
Rng
对象时,
Selection.Range
不会改变。
Rng
对象中查找“Michael”。您设置搜索的语法非常完美。我使用了不同的语法,因为我发现它更容易理解。如果搜索成功,则
.Found
属性返回True。在这种情况下,搜索范围将更改为仅包含找到的子范围。如果以
Selection.Range
进行搜索,则会在屏幕上突出显示“Michael”。但是由于搜索是在内存中(在
Rng
对象上)进行的,因此
Selection.Range
保持不变,而
Rng
对象现在仅包含单词“Michael”。
ActiveDocument.Range
是
Rng
的一部分,现在我们将
Start
属性向左移动两个词。正数会将其向右移2个字。不需要
Extend
,因为命令非常清楚:“Move Start”(移动开始),这意味着End保留在原处。
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/
我是一名优秀的程序员,十分优秀!