「word vba アンカー 行 取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
Wordで図形(オートシェイプ)を扱うときにとても重要な、下図のような碇マーク・アンカーが、
どの行にあるのかを取得するWord VBA(Visual Basic for Applications)のコードを探している方による検索です。
参考になりそうなサンプルマクロを2つご紹介しておきます。
選択されている図形のアンカーの置かれている行番号を取得するマクロと、アクティブなページ上の全図形のアンカーの行番号を取得するマクロです。
選択図形のアンカー行を取得するサンプルマクロ
図形を選択しておいてから以下のマクロを実行すると、選択されている図形のアンカーの行番号が、メッセージボックスに表示されます。
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というプロパティを持っていることがわかります。
オブジェクトブラウザーの詳細ペインを見ると
Shape.Anchorも、
ShapeRange.Anchorも、
Rangeオブジェクトを返してくることがわかります。
Range.Informationプロパティは
引数に指定する定数によって、いろいろな情報を取得できることは頭に入っていたので、使えそうな定数・wdFirstCharacterLineNumberを見つけ、上記のようなマクロに仕上げました。
アクティブなページの全図形のアンカー行を取得するサンプルマクロ
以下のマクロを実行すると、アクティブなページ上にある、すべての図形のアンカーの置かれている行番号が順番にメッセージボックスに表示されます。
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マクロ