用于选择具有相同样式的文本块的宏

时间:2017-08-27 10:35:07

标签: vba ms-word ms-office word-vba

在Word 2016中,已经有内置选项“选择所有样式实例”。以下是它的工作原理:

enter image description here

我想用VBA实现类似的东西。它应该只选择一个文本块。唯一一个,用户的插入符号当前所在的位置。例如,如果插入符号位于Bar()附近,则结果应为:

enter image description here

在文档中选择(和复制/剪切)大型代码块非常有用。

有任何想法可以做到吗?

(我知道,Stack Overflow不是“免费编码服务”,显示一些部分工作的代码是一个很好的做法,作为你自己努力的证据。但是,进入VBA也有点困难“从头开始“,因为我从来没有使用它。在我之前的练习中只有JavaScript。”

2 个答案:

答案 0 :(得分:1)

按Alt + F11打开Visual Basic编辑器

然后选择插入>新模块

粘贴以下代码:

Sub myMacro1()
    WordBasic.SelectSimilarFormatting
End Sub

注意:这适用于Office 2007,不确定它在Word 2016中是否相同。如果您可以从菜单中执行某些操作..您可以尝试录制宏(从“开发人员”选项卡)并查看通过Word自动生成的代码定制它们。

答案 1 :(得分:1)

2年后。

Sub SelectOneRangeSameStyle()
Dim curParagraphIndex As Long
Dim curParagraphStyle As Style

'following complex conditions to adjust the curParagraphIndex
'in the case Selection.Star at the beginning of same-style-range
'or the beginning of the document
If Selection.Start <> Selection.Paragraphs(1).Range.Start Or Selection.Start = 0 Then
    curParagraphIndex = ActiveDocument.Range(0, Selection.Start).Paragraphs.Count
Else
    curParagraphIndex = ActiveDocument.Range(0, Selection.Start).Paragraphs.Count + 1
End If
Set curParagraphStyle = Selection.Paragraphs(1).Style

For i = curParagraphIndex + 1 To ActiveDocument.Paragraphs.Count
    If ActiveDocument.Paragraphs(i).Style <> curParagraphStyle Then Exit For
Next i
Selection.End = ActiveDocument.Paragraphs(i - 1).Range.End

For i = curParagraphIndex - 1 To 1 Step -1
    If ActiveDocument.Paragraphs(i).Style <> curParagraphStyle Then Exit For
Next i
Selection.Start = ActiveDocument.Paragraphs(i + 1).Range.Start

End Sub