【Word VBA】カーソル位置よりも下位のアウトラインレベルの段落を選択するWordマクロ(その2)

2016年12月21日

先日の記事「【コード】カーソル位置よりも下位のアウトラインレベルの段落を選択するWordマクロ(その1)」の続きです。Wordをアウトライナーとして使うときに便利なマクロを別の方式で書いてみました。(参考:【読み物】Wordをアウトライナーとして使う!

今回の記事では、Paragraph.OutlineLevel プロパティ を使っています。

このマクロでできること

前回の記事と同じ機能です。

カーソルがある段落のアウトラインレベルよりも下位の段落を選択します。

「くだもの」にカーソルがあります。

(実行前)

アウトライナー

(実行後)

以下の通り、カーソルが置かれた項目から一番深い階層まで選択します。「柿」は含みません。

アウトライナー

マクロの解説

Paragraphオブジェクトにてアウトラインレベルを判定します。

26行目~28行目のとおり、範囲選択にはRangeオブジェクトを用いています。

マクロ


Sub 下位のアウトラインレベルを選択2()

 Dim myLevel As Long
 Dim myRange As Range
 Dim myPara As Paragraph
 Dim myNextPara As Paragraph
 
 '選択範囲(カーソル位置)の最初の段落をParagraphオブジェクトに設定
 Set myPara = Selection.Paragraphs(1)
 Set myRange = myPara.Range
 
 'myPara(Paragraphオブジェクト)のアウトラインレベルを取得
 'このアウトラインレベルを基準にする
 myLevel = myPara.OutlineLevel
 
 'myParaの次の段落をmyNextPara(Paragraphオブジェクト)に設定
 Set myNextPara = myPara.Next
 
 'アウトラインレベルが低い場合に限りmyParaの範囲を拡大
 Do While myNextPara.OutlineLevel >= myLevel
  
  'myNextParaのアウトラインレベルを取得
  myLevel = myNextPara.OutlineLevel
  
  'myRangeの範囲を再設定(末尾を次の段落myNextParaの末尾にする)
  With myRange
   .SetRange .Start, myNextPara.Range.End
  End With
  
  'myNextParaの次の段落をmyNextParaに設定
  Set myNextPara = myNextPara.Next
  
  '最終段落の場合に終了
  If myNextPara Is Nothing Then Exit Do
  
 Loop
 
 'myRangeを選択する
 myRange.Select

End Sub

-コード
-, ,