カーソル位置の段落番号を取得する方法です。
Word VBAでは、文書中の段落の総数を取得することはできるのですが、現在のカーソル位置が、文書中の何番目の段落にあるのかを数えるものは用意されていません。
以前の勉強会で、段落の番号を取得するための方法を聞かれたことがございましたので、どなたかのお役に立てるのかもしれません。
<目次>
マクロの解説
泥臭い方法ですが、文書の先頭からカーソル位置(文字列が選択されている場合には、選択範囲の末尾位置)までに含まれる段落を数えて、その数をカーソル位置の段落番号としています。
マクロ1~マクロ3は同じ事をしていますが、別の記載にしてみました。
マクロ1では、Start プロパティとEnd プロパティを用いています。
ここに値を入れることで、Rangeオブジェクトの対象範囲や、Selectionオブジェクトの選択範囲を変更できます。
マクロ2では、SetRange というメソッドを用いています。削除(20130309)
Rangeオブジェクトの対象範囲や、Selectionオブジェクトの選択範囲を変更するのに便利なメソッドです。
マクロ3では、With ステートメントを用いています。
可読性(Code Readability)が上がります。
もう少し複雑なものになれば、その効果はわかりやすいと思います。
With ステートメントは、名古屋の勉強会のテーマでもあったので、あえてブログで紹介してみました。
マクロ1
Sub CountParagraphNumber() Dim myParaNum As Integer '段落番号 Dim myRange As Range '段落のカウント用 Set myRange = Selection.Range myRange.Start = 0 'myRange.End = Selection.End ’これ不要でした。(20130309) myParaNum = myRange.Paragraphs.Count MsgBox "カーソル位置の段落:" & myParaNum Set myRange = Nothing End Sub
マクロ2
Sub CountParagraphNumber2() Dim myRange As Range '段落のカウント用 Set myRange = Selection.Range 'myRange.SetRange Start:=0, End:=Selection.End 'これ不要でした。(20130309) myRange.Start = 0 MsgBox "カーソル位置の段落:" & myRange.Paragraphs.Count Set myRange = Nothing End Sub
マクロ3
Sub CountParagraphNumber3() Dim myRange As Range '段落のカウント用 Set myRange = Selection.Range With myRange '.SetRange Start:=0, End:=Selection.End 'これ不要でした。(20130309) .Start = 0 MsgBox "カーソル位置の段落:" & .Paragraphs.Count End With Set myRange = Nothing End Sub
関連記事
海外でも同じようなニーズがありまして、いくつか記事が公開されています。