- ベストアンサー
ワード上Shapeの位置情報を統一基準で取得したい
ワードVBAを書いています。 お客さんのワード文書にShapeが貼り付いていて、その位置情報を、ページの境界線からの距離(ポイント)で取得したいと思っています。 shape.RelativeHorizontalPositionは、wdRelativeHorizontalPositionColumn となっていました。 これはどういう意味なんでしょうか? 色々調べたのですが、なかなかいい情報が見つかりません。 shape.Left/Topを、何の座標と足せば、見た目の座標になるのでしょうか? 詳しい方がおられたら教えてください。
- みんなの回答 (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 で聞いてみました。
その他の回答 (1)
- temtecomai2
- ベストアンサー率61% (656/1071)
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 をヘルプで見てみてください。
補足
回答ありがとうございます。 画面上で見るとページの真ん中へんにあるのに、Topが1pt未満だったりLeftがマイナス値だったりするので悩んでいます。 ヘルプを見ると、 > 図形の位置は、図形の境界ボックスの左上隅から図形のアンカーまでを測定します。 とあるので、アンカー位置を shp.Anchor.Information(wdHorizontalPositionRelativeToPage) で取って、Leftを足したら良いかと思いましたが、やはり見た目の位置とは明らかに違うようです。 shape.RelativeHorizontalPosition を変更すると、取得できるTopやLeftの値が変わるので、関係あるかと思ったのですが…
お礼
ありがとうございます! 教えていただいたキーワードで見つかったMSのサポートページに詳しく(?)でていました。 そのコードをそのまま実行すると、ものによっては元の位置から少しずれてしまうのですが… ほかに方法は無さそうですね。 これで行こうと思います。 ありがとうございました。