![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
インターネットで図形の位置を取得する下記のプログラムを見つけたのですが、図形(四角)を右へ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
No.2ベストアンサー
- 回答日時:
ANo1です。
>単純に選択した図形のサイズを知るプログラムを探しているのですが、見つかりません。
単純に高さ、幅を取得したいのでしたら、ShapeRangeのheight、widthを参照すればよろしいと思います。
https://msdn.microsoft.com/ja-jp/library/office/ …
WordのVBA関連のたいていのことは、(↑)で調べられます。
ただし、上記のままだとピクセル値(72px/inch)が返ってくるようですので、例で挙げておられるのと同様に、計算する単位に合わせた変換が必要かも知れません。
ありがとうございます。
基本的なことが理解できておらず、アドバイス頂いたことをもとにプログラムを作成し、何とか希望通りの結果を得られました。
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
No.1
- 回答日時:
こんにちは
図形を扱ったことはないのですが、少し調べてみたところ・・・
図形の回転は、操作としては「レイアウトオプション」→「回転」で行う方法と、「書式設定」→「3D回転」→「回転(Z)」の二通りの方法がありますが、それぞれが別の操作として扱われているようです。
前者は、.Rotationで参照可能ですし、後者は、.ThreeD.RotationZで参照可能ですが、それぞれに独立した値を保持しています。
MSらしい(?)ことに、前者は時計回りが+、後者は反時計回りが+符号となるという逆の座標系になっているようで、実際に表示する際には両方の回転量を加算した結果で表示している模様です。
それなので、両方の値を調べて、得られた実際の回転角から計算して求めればよいのではないでしょうか?
もっとも、回転が90°単位で限定されている保証があるのなら、±90°と±270°の場合には、幅と高さを入れ替えるだけですみますので、大分簡単になりますね。
自由な回転角度でも算出したい場合は、実際の四角形の頂点位置を算出するのか、四角形を包含する(仮想)四角形の頂点で計算するのかで結果が異なってきます。
まぁ、前者の場合であっても4点の中の最も左、最も上の値を別々に選ぶような考えであるなら、結果は後者(=仮想四角形の場合)と一致します。
質問が悪かったようで、詳しい説明を頂き恐縮です。ただ単に90°右回転なので、ご説明にあるように高さと幅を入れ替えるだけの話しでした。目から鱗の思いです。
単純に選択した図形のサイズを知るプログラムを探しているのですが、見つかりません。VBAは初心者ですので、お分かりでしたら書き込み宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- Excel(エクセル) エクセルVBA Msgboxでの変数の活用 4 2023/07/23 08:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
ダイアログ内コントロールの位...
-
VB6で2点間の直線の長さを求め...
-
Excel VBA で自在に図形を変化...
-
住所から経緯経度を出したい
-
空間上の二点を結ぶ直線上に任...
-
位置座標からx軸となす角度(ラ...
-
エクセルである点からの距離で...
-
直線を描画するプログラム
-
VB2010 直線の回転
-
多角形の内部かどうか判定する方法
-
座標など - イラストレータ CS2
-
エクセルシート上のマウスポイ...
-
演算子と座標変換
-
3D→2Dの座標変換で、スクリーン...
-
サーボモータの制御
-
OpenCvSharp4による画像判定解...
-
一番近い点を見つけたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルである点からの距離で...
-
エクセルで回転する座標の出し方
-
3次元空間上の2つの座標から...
-
始点、終点の二つの座標と半径...
-
c言語でキーボードから2点の座...
-
閉図形の座標の配列が右回りか...
-
以下のプログラムは重心を求め...
-
交差する2線分の交点座標の求め方
-
y=x^2の座標をプロットするプロ...
-
ダイアログ内コントロールの位...
-
シーケンサー(PLC?)で制...
-
ガウシアンフィルタのCプログラム
-
多角形の内部かどうか判定する方法
-
直線上にある点の座標の求め方
-
エクセルシート上のマウスポイ...
-
OpenCvSharp4による画像判定解...
-
C言語 配列で座標
-
ピクチャボックスの座標取得
おすすめ情報