Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » アンカーの行番号を取得するWordマクロ

アンカーの行番号を取得するWordマクロ

対象:Word2007, Word2010, Word2013

「word vba アンカー 行 取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

Wordで図形(オートシェイプ)を扱うときにとても重要な、下図のような碇マーク・アンカーが、

アンカーの行番号を取得するWordマクロ

どの行にあるのかを取得するWord VBA(Visual Basic for Applications)のコードを探している方による検索です。

参考になりそうなサンプルマクロを2つご紹介しておきます。

選択されている図形のアンカーの置かれている行番号を取得するマクロと、アクティブなページ上の全図形のアンカーの行番号を取得するマクロです。

[スポンサードリンク]

選択図形のアンカー行を取得するサンプルマクロ

図形を選択しておいてから以下のマクロを実行すると、選択されている図形のアンカーの行番号が、メッセージボックスに表示されます。

Sub 選択図形のアンカー行番号()

 With Selection
 If .Type = wdSelectionShape Then

  MsgBox .ShapeRange.Anchor. _
  Information(wdFirstCharacterLineNumber)

 End If
 End With

End Sub

図形が選択されているときに、
 With Selection
 If .Type = wdSelectionShape Then

そのShapeRangeオブジェクトのAnchorプロパティでRangeオブジェクトを取得して、
  MsgBox .ShapeRange.Anchor. _

RangeオブジェクトのInformationプロパティの引数に定数・wdFirstCharacterLineNumberを指定することで、Rangeオブジェクトの最初の文字の行番号を取得して、メッセージボックスに表示しています。
  Information(wdFirstCharacterLineNumber)

もう少しシンプルな方法で取得できるような気もするのですが、私が考えつくことができたのは、この方法です。

サンプルマクロの解説

上記のマクロのロジック自体は、難しくはありません。

課題は、どうやって
 Selection.ShapeRange.Anchor. _
 Information(wdFirstCharacterLineNumber)
というオブジェクト式を見つけるかでしょう。

私は以下のような手順でこのオブジェクト式を得ました。

アンカー関連のプロパティやメソッドには「anchor」という単語は含まれているという予測のもとに、まずは、オブジェクトブラウザーで「anchor」を検索しました。

すると、ShapeオブジェクトとShapeRangeオブジェクトがAnchorというプロパティを持っていることがわかります。

アンカーの行番号を取得するWordマクロ

オブジェクトブラウザーの詳細ペインを見ると
Shape.Anchorも、

アンカーの行番号を取得するWordマクロ

ShapeRange.Anchorも、

アンカーの行番号を取得するWordマクロ

Rangeオブジェクトを返してくることがわかります。

Range.Informationプロパティは

アンカーの行番号を取得するWordマクロ

引数に指定する定数によって、いろいろな情報を取得できることは頭に入っていたので、使えそうな定数・wdFirstCharacterLineNumberを見つけ、上記のようなマクロに仕上げました。

アクティブなページの全図形のアンカー行を取得するサンプルマクロ

以下のマクロを実行すると、アクティブなページ上にある、すべての図形のアンカーの置かれている行番号が順番にメッセージボックスに表示されます。

Sub アクティブページ上の全図形のアンカー行番号()

 Dim shp As Shape

 For Each shp In _
 ActiveDocument.Bookmarks("\page"). _
 Range.ShapeRange

  MsgBox shp.Anchor. _
   Information(wdFirstCharacterLineNumber)

 Next shp

End Sub

アクティブなページ上の全図形に対してループを回して、
 For Each shp In _
 ActiveDocument.Bookmarks("\page"). _
 Range.ShapeRange

アンカーの置かれている行番号をメッセージボックスに表示しています。
  MsgBox shp.Anchor. _
   Information(wdFirstCharacterLineNumber)

先のマクロでは、
ShapeRange.AnchorでRangeオブジェクトを取得していましたが、
こちらのマクロでは、
Shape.AnchorでRangeオブジェクトを取得しています。

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » アンカーの行番号を取得するWordマクロ

「Shape・図形」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.