我正在尝试创建一个用于Word的VBA宏,该宏在光标的位置插入一个字段。字段的类型将取决于光标前面的文本。我发现很难访问到那条短信。
以下是我尝试过的:
MsgBox "Text before selection: " & ActiveDocument.Range(Selection.Start - 10, Selection.Start).Text
这在主文本中很好,但在文档的其他部分(头、页脚、文本帧、.)则失败。原因是ActiveDocument.Range
创建的范围指向了主要的故事范围。是否有方法为Range
的故事范围创建Selection
发布于 2022-04-26 08:39:58
Selection.Range
已经是您要寻找的方法:它在与所选内容相同的故事范围内创建一个新的Range
对象。将该Range
存储在变量中,并更新其Start
和End
属性以获取相邻文本。
无论文档的哪一部分被选中,此代码都会在选定之前获取文本:
Dim oRng As Range
Set oRng = Selection.Range
With oRng
.End = .Start
.Start = .Start - 10
MsgBox "Text before selection: " & .Text
End With
同时更新Start
和End
属性的另一个选项是SetRange
方法。
Update:通过With
关键字,甚至可以避免变量声明和赋值。也就是说,这也很有效(但更难理解,涉及了多少对象):
With Selection.Range
.SetRange .Start - 10, .Start
MsgBox "Text before selection: " & .Text
End With
发布于 2022-04-26 13:56:03
若要在选定内容之前获取文本,无需移动所选内容,可以使用:
With Selection.Range.Duplicate
.SetRange .Start - 10, .Start
MsgBox "Text before selection: " & .Text
End With
或者,对于比前面10个字符(例如前两个单词)更有意义的内容,您可以使用如下内容:
With Selection.Range.Duplicate
.End = .Words.First.Start
.MoveStart wdWord, -2
MsgBox "Text before selection: " & .Text
End With
https://stackoverflow.com/questions/72017594
复制相似问题