プロが教えるわが家の防犯対策術!

こんにちは。
OSはWinXP Pro、OfficeXPを使用しています。
1ページ目にあるグループ化された図形をページを
追加して貼り付けていくマクロを以前質問したので
すが、ShapeRange.Leftの代入がうまくいきません。
********************************************
Sub 図形追加()
Dim siTop As Single
Dim siLeft As Single
Selection.HomeKey unit:=wdStory
ActiveDocument.Shapes("Group 1478").Select
siTop = Selection.ShapeRange.Top
siLeft = Selection.ShapeRange.Left
Selection.Copy
Selection.EndKey unit:=wdStory
Selection.InsertBreak Type:=wdPageBreak
Selection.GoTo What:=wdGoToPage, _
Which:=wdGoToNext
Selection.Paste
Selection.ShapeRange.Top = siTop
Selection.ShapeRange.Left = siLeft
Selection.HomeKey unit:=wdLine
End Sub
********************************************
上述の値を追っていくと、
siTop=40.25、siLeft=46が入っているのですが、
下から2段目のShaperange.Leftを実行すると
そこには-785.05 という数値が入ってしまいます。
(どこからその数値がでてきたのか????)
Shaperange.Topはうまくいくのですが、ステートメント
の実行順を変えてもうまくいきません。
どなたか解決策のご教授をお願いします。

A 回答 (3件)

前回の misatoanna です。



単体画像ですとちゃんと動くのですが、グループ化された図形ですと貼り付け位置が
変わってしまうようですね。
図形を選択しただけで取得する .Top や .Left の値は、その図形のアンカー位置
を基準にしているみたいですね。(よくわかりませんが)

今度は、図形の位置をページ左上隅からの距離にして少々書き直してみました。
こちらのテストではグループ図形も期待どおりに動いたのですが。。。。 そちらで
うまくいかなかったらごめんなさい。     ^_^;

Sub Test()
 Dim siTop As Single
 Dim siLeft As Single
 Selection.HomeKey unit:=wdStory
 ActiveDocument.Shapes("Group XX").Select
  Selection.ShapeRange.RelativeHorizontalPosition = _
       wdRelativeHorizontalPositionPage
  Selection.ShapeRange.RelativeVerticalPosition = _
       wdRelativeVerticalPositionPage
 siTop = Selection.ShapeRange.Top
 siLeft = Selection.ShapeRange.Left
 Selection.Copy
 Selection.EndKey unit:=wdStory
 Selection.InsertBreak Type:=wdPageBreak
 Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext
 Selection.Paste
 Selection.ShapeRange.Top = siTop
 Selection.ShapeRange.Left = siLeft
 Selection.HomeKey unit:=wdLine
End Sub

この回答への補足

misatoannaさん、こんにちは。
前回に引き続きありがとうございます。
教えていただいたコードをコピーしたのですが、
解決されませんでした。ただ、大事な事を言い忘れ
ていることに気がつきました。用紙サイズはA4で
余白の設定を上80mm下15mm左15mm右30mmに設定して
います。図形はその余白を超えて指定してあります。
それが「悪さ」しているのかもしれません。
更なる解決策があるようでしたらご教授願います。

補足日時:2006/06/27 15:00
    • good
    • 0

こんにちわ。

misatoannaです。
("こんにちは"が正しいようですが)

> 教えていただいたコードをコピーしたのですが解決されませんでした。
実行した結果と期待値とは、具体的にはどのように違うのでしょうか。

> 図形はその余白を超えて指定してあります。それが悪さしているのかも。
図形の位置は設定されている用紙の左上端からの距離を取得していますので、
マイナス位置でも影響ないはずなのですが。
こちらでは、文章編集エリア内、余白、余白外(図の一部が用紙の外)にかか
わらずに正常に動作しています。
――バージョンが違う(2002 / 2000)から、ということは関係ないと思うの
ですが。

この回答への補足

misatoannaさん、こんにちは。
時間が返答が遅くなってすみませんでした。
****************************************
具体的にはShapeRange.Leftを実行すると、
図形がページの外へ(?)いってしまいます(
どこかに消えてしまいます。「戻る」ボタン
を押すと画面上に戻ってきます。ページの外へ
いってしまっているようですが・・・。)
****************************************
これだけで何かのヒントになるでしょうか?
ご面倒かけますがよろしくお願いいたします。

補足日時:2006/07/04 08:18
    • good
    • 0

Dimで、TopやLeftの数値は「 As Long」だったようにおもう。


Sub 図形追加()
Dim siTop As Long
Dim siLeft As Long
Selection.HomeKey unit:=wdStory
siName = ActiveDocument.Shapes.AddShape(msoShapeRectangle, 50, 50, 200, 100).Name
MsgBox siName
ActiveDocument.Shapes(siName).Select
siTop = Selection.ShapeRange.Top
siLeft = Selection.ShapeRange.Left
MsgBox siTop & " " & siLeft
Selection.Copy
Selection.EndKey unit:=wdStory
Selection.InsertBreak Type:=wdPageBreak
Selection.GoTo What:=wdGoToPage, _
Which:=wdGoToNext
Selection.Paste
Selection.ShapeRange.Top = siTop
Selection.ShapeRange.Left = siLeft
Selection.HomeKey unit:=wdLine
End Sub
を実行しましたがマイナスの数字が出てしまいます。
しかし最終ページに同じ図形が、コピー元と、同じ位置現れるところ
から、結果は正しくありませんか。
マイナスの意味がわかりませんね。
ーー
カーソルの当初位置(点滅している位置)を、余白を変えて動かすと
上記MsgBox表示の数字がプラスになったりするので、そこが基準かなとも思いましたが(そこより上や左はマイナス)、自信ありません。
答えになってなくてすみません。
    • good
    • 0
この回答へのお礼

imogasiさん、こんにちは。
なるほど、余白に何かありそうですね!
余白を変えたくらいでプラス値がマイナス
になるのも困ったものです。。。
何か解決策があるといいのですが・・・。
どうもありがとうございました。

お礼日時:2006/06/27 15:17

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