dポイントプレゼントキャンペーン実施中!

インターネットで図形の位置を取得する下記のプログラムを見つけたのですが、図形(四角)を右へ90度回転した場合でも、原形の位置が返されます。図形のサイズによって変化するので、サイズを自動的に取得し、回転した図形の上と左が、用紙の上端、左端からいくらの位置になるか、プログラムを組むことはできないでしょうか? よろしくお願いします。


Sub 選択されている図形の位置を取得する()
Dim msg As String
With Selection
If .Type = wdSelectionShape Then
With .ShapeRange
.RelativeVerticalPosition _
= wdRelativeVerticalPositionPage
.RelativeHorizontalPosition _
= wdRelativeHorizontalPositionPage
msg = "用紙上端から "
msg = msg & Round(PointsToCentimeters(.Top), 2) & "cm"
msg = msg & vbCrLf & "用紙左端から "
msg = msg & Round(PointsToCentimeters(.Left), 2) & "cm"
End With
Else
msg = "図形を選択して実行してください。"
End If
End With
MsgBox msg
End Sub

A 回答 (2件)

ANo1です。



>単純に選択した図形のサイズを知るプログラムを探しているのですが、見つかりません。
単純に高さ、幅を取得したいのでしたら、ShapeRangeのheight、widthを参照すればよろしいと思います。
 https://msdn.microsoft.com/ja-jp/library/office/ …
WordのVBA関連のたいていのことは、(↑)で調べられます。

ただし、上記のままだとピクセル値(72px/inch)が返ってくるようですので、例で挙げておられるのと同様に、計算する単位に合わせた変換が必要かも知れません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
基本的なことが理解できておらず、アドバイス頂いたことをもとにプログラムを作成し、何とか希望通りの結果を得られました。

Sub 用紙ヨコ右90度回転図形の位置を取得()

Dim msg As String
Dim Takasa As String
Dim Haba As String

With Selection.ShapeRange
Takasa = Selection.ShapeRange.Height * 0.3528
Haba = Selection.ShapeRange.Width * 0.3528
End With
............
.............

End Sub

お礼日時:2016/03/15 12:14

こんにちは



図形を扱ったことはないのですが、少し調べてみたところ・・・

図形の回転は、操作としては「レイアウトオプション」→「回転」で行う方法と、「書式設定」→「3D回転」→「回転(Z)」の二通りの方法がありますが、それぞれが別の操作として扱われているようです。

前者は、.Rotationで参照可能ですし、後者は、.ThreeD.RotationZで参照可能ですが、それぞれに独立した値を保持しています。
MSらしい(?)ことに、前者は時計回りが+、後者は反時計回りが+符号となるという逆の座標系になっているようで、実際に表示する際には両方の回転量を加算した結果で表示している模様です。
それなので、両方の値を調べて、得られた実際の回転角から計算して求めればよいのではないでしょうか?

もっとも、回転が90°単位で限定されている保証があるのなら、±90°と±270°の場合には、幅と高さを入れ替えるだけですみますので、大分簡単になりますね。
自由な回転角度でも算出したい場合は、実際の四角形の頂点位置を算出するのか、四角形を包含する(仮想)四角形の頂点で計算するのかで結果が異なってきます。
まぁ、前者の場合であっても4点の中の最も左、最も上の値を別々に選ぶような考えであるなら、結果は後者(=仮想四角形の場合)と一致します。
    • good
    • 0
この回答へのお礼

質問が悪かったようで、詳しい説明を頂き恐縮です。ただ単に90°右回転なので、ご説明にあるように高さと幅を入れ替えるだけの話しでした。目から鱗の思いです。
単純に選択した図形のサイズを知るプログラムを探しているのですが、見つかりません。VBAは初心者ですので、お分かりでしたら書き込み宜しくお願いします。

お礼日時:2016/03/14 15:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!