首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在当前选定内容之前获取文本

如何在当前选定内容之前获取文本
EN

Stack Overflow用户
提问于 2022-04-26 16:39:58
回答 2查看 124关注 0票数 1

我正在尝试创建一个用于Word的VBA宏,该宏在光标的位置插入一个字段。字段的类型将取决于光标前面的文本。我发现很难访问到那条短信。

以下是我尝试过的:

代码语言:javascript
代码运行次数:0
运行
复制
MsgBox "Text before selection: " & ActiveDocument.Range(Selection.Start - 10, Selection.Start).Text

这在主文本中很好,但在文档的其他部分(头、页脚、文本帧、.)则失败。原因是ActiveDocument.Range创建的范围指向了主要的故事范围。是否有方法为Range的故事范围创建Selection

EN

回答 2

Stack Overflow用户

发布于 2022-04-26 16:39:58

Selection.Range已经是您要寻找的方法:它在与所选内容相同的故事范围内创建一个新的Range对象。将该Range存储在变量中,并更新其StartEnd属性以获取相邻文本。

无论文档的哪一部分被选中,此代码都会在选定之前获取文本:

代码语言:javascript
代码运行次数:0
运行
复制
Dim oRng As Range
Set oRng = Selection.Range
With oRng
    .End = .Start
    .Start = .Start - 10
    MsgBox "Text before selection: " & .Text
End With

同时更新StartEnd属性的另一个选项是SetRange方法。

Update:通过With关键字,甚至可以避免变量声明和赋值。也就是说,这也很有效(但更难理解,涉及了多少对象):

代码语言:javascript
代码运行次数:0
运行
复制
With Selection.Range
    .SetRange .Start - 10, .Start
    MsgBox "Text before selection: " & .Text
End With
票数 1
EN

Stack Overflow用户

发布于 2022-04-26 21:56:03

若要在选定内容之前获取文本,无需移动所选内容,可以使用:

代码语言:javascript
代码运行次数:0
运行
复制
With Selection.Range.Duplicate
    .SetRange .Start - 10, .Start
    MsgBox "Text before selection: " & .Text
End With

或者,对于比前面10个字符(例如前两个单词)更有意义的内容,您可以使用如下内容:

代码语言:javascript
代码运行次数:0
运行
复制
With Selection.Range.Duplicate
  .End = .Words.First.Start
  .MoveStart wdWord, -2
  MsgBox "Text before selection: " & .Text
End With
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72017594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档