• ベストアンサー

ワード上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

  • VBAを用いたワード文書内ハイパーリンク情報取得

    VBAもしくはVBSを用いてワード文書内のハイパーリンク情報(どのページに飛ぶかなど)を取得するにはどのように記述すればよろしいでしょうか? ワードを開いて閉じるくらいは調べて出てきたのでできましたが、ハイパーリンクの情報取得はみつけきれませんでした。 プログラムコードそのものや参考になるサイト等ありましたら教えてください。

  • オートシェイプの位置

    エクセルですが。 セレクトされているオートシェイプを所定の位置に配置するマクロとして、以下は動作するのですが。 Selection.ShapeRange.Left = 250 Selection.ShapeRange.Top = 100 名前ボックスからオートシェイプの名前を aaa に変更し、以下のマクロを実行すると、いずれもエラーになってしまいます。 aaa.ShapeRange.Left = 250 aaa.ShapeRange.Top = 100 aaa.Left = 250 aaa.Top = 100 どこが間違っているのでしょうか?

  • 【Word2007】Shapeの中のInlineShapeの情報を取得したい

    いつもお世話になっております。 (図がなくて説明が悪かったと思いますので、訂正しました。) Word2007を使用しています。 [挿入]⇒[図形]から「テキストボックス」を入力できると思います。 その中に、[開発]⇒[コントロール]などから InlineShapeを配置できると思います。 そこで質問なのですが、 テキストボックス内のInlineShapeの情報を取得するには どのようにしたら良いでしょうか? Shapeの情報であれば以下のように取得できると思います。 Dim shape As Word.shape For Each shape In ActiveDocument.Shapes '必要に応じてプロパティの値を変えます。 MsgBox (shape.Width) Next 同じようにInlineShapeの情報であれば、 以下のように取得できると思います。 Dim ishape As Word.InlineShape For Each ishape In ActiveDocument.InlineShapes '必要に応じてプロパティの値を変えます。 MsgBox (shape.Width) Next ここまでは分かったのですが、 Shape内に配置されているInlineShapeの情報を取得する方法が どうしても分かりませんでした。 もしご存知でしたら、教えて頂けませんか? ぜひよろしくお願い致します。 ※図を付けます。  図に載せたコマンドボタンの情報を取得したいと思っております。  よろしくお願い致します。

  • word2003でオートシェイプのレイアウトが崩れます。

    word2000で作成した文書があり、それをword2003で開くと、 オートシェイプの位置がめちゃめちゃになり、レイアウトが崩れてしまいます。 どうしたら通常通りに直せるでしょうか。 教えて下さい。

  • Iphonで(座標)位置情報を取得できますか

    Iphonで位置情報を取得する時にグーグルの座標位置を表示させる方法というのは ありますでしょうか 宜しくお願いします

  • Word2000でオートシェイプの削除をすると…

    Word2000で作成中の文書で、あるオートシェイプの削除を実行すると、「このプログラムは不正な処理を…」とメッセ―ジが出て異常終了してしまいます。詳細をみると「ページ違反」とあります。同じ文書中のほかのオートシェイプや他の文書では問題なく削除できます。どうしてこのようなことが起こるのか、教えてください。お願いします。

  • ワード97のオートシェイプがうまく働かない

    ワード97を使って文書を作っています。 オートシェイプの四角の囲み線で、文書を囲む作業をしているのですが、3ページまではきちんとできたのですが、4ページ目の写真を貼りつけた文書になったら、囲み線で囲うと3Dの色つき(茶色と黒)の直方体が出てきて、「3-Dなし」にしても通常の囲み線にはならず、文書が次のページに逃げてしまって、立方体の図形だけがページに残り、囲むことができません。「順序」をいろいろと押してみたのですが、全然関係ないようです。 これは写真が入っているからこうなるのか?と思い、写真を抜いて文書だけにしてやってみたのですが、なおりません。 どこで設定すれば通常の囲み線として使えるのでしょうか?設定を変えた覚えがないのですが、こんなことってあるのでしょうか?

  • EXCEL97での位置情報取得に

    エクセル97での位置情報の取得について エクセルのVBAにて、セルを無視したシート内の位置情報を 取得することは可能でしょうか? たとえば一番左上を(0,0)とすると(50,100)などの X軸、Y軸の数字の取得です。 あるA画像をX軸50 Y軸100の位置に挿入して、   B画像をX軸50 Y軸150の位置に挿入して、   C画像をX軸50 Y軸200の位置に挿入したいと考えています。 そのようなことは可能でしょうか? セルを無視した位置情報の取得の仕方を教え下さい。 参考のURLでも構いません。宜しくお願い致します。

  • VBA 写真の挿入 回転

    お世話になります。 工事写真を("工事写真台紙")シートに挿入するVBAを組みました。 アクティブセルの Left Top と写真の Left Top を合わせて 所定の位置に貼り付ける事が出来ています。 ところが1つ問題が出てきました。 デジカメを横(右90度)にして撮影した写真(縦長の写真)を貼り付ける必要が出てきたので VBAで貼り付ける際、Rotation = 90# で回転させましたが アクティブセルの Left Top と写真の Left Top を合わせても セルと写真の左上は合いません。 写真を回転させても、位置情報としての写真の Left Top は変らないみたいです。 見た目の左上を合わす事が出来ません。 座標を取得すれば・・?sin.cos.tan・・? セルの width と 写真の width・・? Increment で移動して・・? 煮詰まってどうにもなりません。 どなたかご教授下さい。

  • エクセル97での位置情報取得について

    エクセル97での位置情報の取得について 再度質問させていただきます エクセルのVBAにて、セルを無視したシート内の位置情報を 取得することは可能でしょうか? たとえば一番左上を(0,0)とすると(50,100)などの X軸、Y軸の数字の取得です。 あるA画像をX軸50 Y軸100の位置に挿入して、   B画像をX軸50 Y軸150の位置に挿入して、   C画像をX軸50 Y軸200の位置に挿入したいと考えています。 画像を挿入した後の位置情報の取得ではなく、位置情報を指定してから その場所に画像を挿入したいと考えています。 そのようなことは可能でしょうか? セルを無視したワークシート上のX軸、Y軸の 位置情報の取得の仕方を教え下さい。 参考のURLでも構いません。宜しくお願い致します。

専門家に質問してみよう