• ベストアンサー

ワード上Shapeの位置情報を統一基準で取得したい

ワードVBAを書いています。 お客さんのワード文書にShapeが貼り付いていて、その位置情報を、ページの境界線からの距離(ポイント)で取得したいと思っています。 shape.RelativeHorizontalPositionは、wdRelativeHorizontalPositionColumn となっていました。 これはどういう意味なんでしょうか? 色々調べたのですが、なかなかいい情報が見つかりません。 shape.Left/Topを、何の座標と足せば、見た目の座標になるのでしょうか? 詳しい方がおられたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1 です。 失礼しました。 Top および Left はアンカーからの位置っぽいですね。 なのでアンカーがページ端からどのぐらいの位置にあるのかを加えなければなりません。 Dim leftPos As Single Dim topPos As Single leftPos = myShape.Anchor.Information(wdHorizontalPositionRelativeToPage) + myShape.Left topPos = myShape.Anchor.Information(wdVerticalPositionRelativeToPage) + myShape.Top これで出せると思います。 Google 様に word shape absolute position vba で聞いてみました。

hallowmas2
質問者

お礼

ありがとうございます! 教えていただいたキーワードで見つかったMSのサポートページに詳しく(?)でていました。 そのコードをそのまま実行すると、ものによっては元の位置から少しずれてしまうのですが… ほかに方法は無さそうですね。 これで行こうと思います。 ありがとうございました。

その他の回答 (1)

回答No.1

Top と Left じゃないですか? Dim myShape As Shape Set myShape = ActiveDocument.Shapes.AddShape(msoShapeRectangle, 0, 0, 30, 30) myShape.Top = 100 myShape.Left = 100 Top、Left、AddShape をヘルプで見てみてください。

hallowmas2
質問者

補足

回答ありがとうございます。 画面上で見るとページの真ん中へんにあるのに、Topが1pt未満だったりLeftがマイナス値だったりするので悩んでいます。 ヘルプを見ると、 > 図形の位置は、図形の境界ボックスの左上隅から図形のアンカーまでを測定します。 とあるので、アンカー位置を shp.Anchor.Information(wdHorizontalPositionRelativeToPage) で取って、Leftを足したら良いかと思いましたが、やはり見た目の位置とは明らかに違うようです。 shape.RelativeHorizontalPosition を変更すると、取得できるTopやLeftの値が変わるので、関係あるかと思ったのですが…

関連するQ&A