• ベストアンサー

ワード2002で「 Selection.ShapeRange.Left 」 が設定できない

こんにちは。 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はうまくいくのですが、ステートメント の実行順を変えてもうまくいきません。 どなたか解決策のご教授をお願いします。

  • enako
  • お礼率62% (298/476)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

前回の 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

enako
質問者

補足

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

その他の回答 (2)

回答No.3

こんにちわ。misatoannaです。 ("こんにちは"が正しいようですが) > 教えていただいたコードをコピーしたのですが解決されませんでした。 実行した結果と期待値とは、具体的にはどのように違うのでしょうか。 > 図形はその余白を超えて指定してあります。それが悪さしているのかも。 図形の位置は設定されている用紙の左上端からの距離を取得していますので、 マイナス位置でも影響ないはずなのですが。 こちらでは、文章編集エリア内、余白、余白外(図の一部が用紙の外)にかか わらずに正常に動作しています。 ――バージョンが違う(2002 / 2000)から、ということは関係ないと思うの ですが。

enako
質問者

補足

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

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表示の数字がプラスになったりするので、そこが基準かなとも思いましたが(そこより上や左はマイナス)、自信ありません。 答えになってなくてすみません。

enako
質問者

お礼

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

関連するQ&A

  • word2003のマクロが2007でエラーになる

    word2003(windows2000)で使っていたマクロを、人に頼まれてその人の2007のword(windowsXP)に入れたのですがエラーが出て動かないそうです。 マクロは以下のページにあったものの改造で、どこを直したらよいのかわかりません。 http://okwave.jp/qa/q2344318.html 答えでなく、ヒントでも良いのでどなたか教えてください。 h = Selection.ShapeRange.Heightという行で、「エラー5 プロシージャの呼び出し、または引数が不正です」というようなエラーが出るそうです。 2003ではエラーは出ず、選択されている画像の高さがhに入ります。 よろしくお願いします。 ----------------------------------- Public Sub ChgPest() '選択した画像をクリップボードの中身と入れ替えてemfで貼り付ける Dim T, L, h, W, cl, cr, ct, cb As Integer Dim FName As String Dim MyShape As Shape Dim fd As FileDialog Dim clp As Integer Application.ScreenUpdating = False T = Selection.ShapeRange.Top L = Selection.ShapeRange.Left h = Selection.ShapeRange.Height ←●デバッグするとここが黄色になっている W = Selection.ShapeRange.Width posi = Selection.ShapeRange.RelativeVerticalPosition cl = Selection.ShapeRange.PictureFormat.CropLeft cr = Selection.ShapeRange.PictureFormat.CropRight ct = Selection.ShapeRange.PictureFormat.CropTop cb = Selection.ShapeRange.PictureFormat.CropBottom Set myrange = Selection.Range Selection.Delete Selection.PasteSpecial datatype:=wdPasteEnhancedMetafile 'EMFでペースト clp = ActiveDocument.Shapes.Count 'すべてのshapeを数える Set MyShape = ActiveDocument.Shapes(clp) '最後にペーストしたshape ActiveDocument.Shapes(clp).LockAnchor = False 'アンカーを固定しない ActiveDocument.Shapes(clp).WrapFormat.Type = 3 MyShape.Select With Selection.ShapeRange.PictureFormat .CropLeft = cl .CropRight = cr .CropTop = ct .CropBottom = cb End With Selection.ShapeRange.RelativeVerticalPosition = posi Selection.ShapeRange.Top = T Selection.ShapeRange.Left = L Selection.ShapeRange.Height = h Selection.ShapeRange.Width = W Selection.ShapeRange.ZOrder msoSendToBack Application.ScreenUpdating = True End Sub

  • Excel2007 VBAで画像挿入について

    Sub 図形挿入等倍() Dim FilePath As Variant FilePath = Application.GetOpenFilename(",*.png") If Not FilePath = False Then ActiveSheet.Pictures.Insert(FilePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = Selection.ShapeRange.Width * 1# Selection.ShapeRange.Left = ActiveCell.Left + 2.25 Selection.ShapeRange.Top = ActiveCell.Top + 2.25 End If With Selection.ShapeRange.Line .Weight = 2.25 '線の太さを2.25に .ForeColor.RGB = RGB(255, 0, 0) '赤枠に End With End Sub 上記のコードを書き、画像を挿入したときは問題ないのですが 画像を挿入せずにキャンセルすると 実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。とでてしまいます デバックをしてみると With Selection.ShapeRange.Lineの部分が黄色くなっているので ここを修正したらいいと思うのですが どのように修正したらいいのか分かりません お分かりの方いましたらご教授お願い致します

  • Excelのinputboxでのエラーについて

    線を引く構文を作り動作はするのですが、inputboxでウインドウの「×」や「キャンセル」ボタンを押すとエラーになるのを回避したいのですが、判りません。ご教示お願いいたします。 Sub 赤太線引き() Dim i As String i = Application.InputBox("線を伸縮できます" + Chr(13) + "数値を増してください", "オプション", 1, Type:=1) Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("ah61") T1 = .Top L1 = .Left End With With Range("cg60") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With ActiveSheet.Shapes.AddLine(L1 + i, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 15# .ForeColor.SchemeColor = 10 Selection.ShapeRange.ZOrder msoSendToBack End With Range("bq56").Select End Sub VBAの素人ですが、×やキャンセルでは「i」が返せないのだと思います。よろしくお願い致します。 inputboxは関数でもメソッドでもどちらでもいいのですが。

  • VBAで画像を自動で切り替える方法

    Excelで棚割表を作っています。商品コードを打つとその商品の画像を自動で表示させたいのですが、雑誌を見ながらコードをアレンジしてほぼ完成したのですが、「プロシージャーが大きい」とエラーが出てマクロを実行出来ません。 画像は100個程度あり、先に別のマクロで貼り付けてあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String If Intersect(Target, Range("A4")) Is Nothing Then ActiveSheet.Shapes("画像").Delete ファイル = "C:\保存場所\" & Range("A4").Value & ".jpg" Range("B5").Select ActiveSheet.Pictures.Insert(ファイル).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像" End If (中略) Dim ファイル98 As String If Intersect(Target, Range("U60")) Is Nothing Then Exit Sub ActiveSheet.Shapes("画像98").Delete ファイル98 = "C:\保存場所\" & Range("U60").Value & ".jpg" Range("V61").Select ActiveSheet.Pictures.Insert(ファイル98).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Top = ActiveCell.Top Selection.ShapeRange.Left = ActiveCell.Left Selection.ShapeRange.Height = 97 Selection.ShapeRange.Width = 52.5 Selection.ShapeRange.Rotation = 0# Selection.ShapeRange.IncrementLeft 1.5 Selection.ShapeRange.IncrementTop 1.5 Selection.Name = "画像98" End Sub 省ける箇所や分割する方法などありましたら教えてください。

  • Word2007マクロ

    宜しくお願い致します Word2007でこんな事が出来ますか Excel2007で線路を作るマクロを作成しました(本を見て) これをWordでも使用したいのですが、Excelのマクロそのまま WordのVisual Basicに書き込んでもエラーが出て機能しません Excelのマクロは以下です Sub 線路作成() 上端位置 = Selection.Top 左端位置 = Selection.Left  Selection.ShapeRange.Line.Weight = 6# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Duplicate.Select Selection.ShapeRange.IncrementLeft -18# Selection.ShapeRange.IncrementTop 9.6 Selection.ShapeRange.Line.DashStyle = msoLineDash Selection.ShapeRange.Line.Weight = 4.5 Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.ForeColor.SchemeColor = 9 Selection.ShapeRange.Line.Visible = msoTrue Selection.Top = 上端位置 Selection.Left = 左端位置 End Sub Wordで使えるようにするには、どこを直せばよいでしょうか。

  • マクロで線に色をつけるには

    WINDOWS XP EXCELL2003です。 現在、下記のマクロがあります。 それに追加として「赤の線の色」を追加したいのです。(.ColorIndex = 3) いろいろトライを試みましたがうまくいきません。 恐れ入りますがご指導いただけませんでしょうか。 よろしく御願いします。 Sub yokosen_chuuou() Dim yokohaba As Single, tatehaba As Single Dim yoko As Double, takasa As Double Dim shita As Double, migi As Double Dim futosa As Single, mannaka As Double On Error GoTo trap futosa = Val(InputBox("太さを指定してください?", "整数入力", 1)) tatehaba = Selection.Height takasa = ActiveCell.Top shita = takasa + tatehaba yoko = ActiveCell.Left yokohaba = Selection.Width migi = yoko + yokohaba mannaka = (shita - takasa) / 2 + takasa ActiveSheet.Shapes.AddLine(yoko, mannaka, migi, mannaka).Select With Selection .ShapeRange.Line.Weight = futosa .Placement = xlMoveAndSize End With trap: End Sub

  • Excelの罫線に関するマクロ

    Excelの罫線に関するマクロ 罫線を引き、それを赤くするマクロを作ったのですが、赤罫線の下にもうひとつ罫線が表示されてしまいます。どこを削除すればよいのでしょうか。 ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub よろしくお願いします。

  • 図形をコピーするマクロ(エクセル)

    以下のマクロで、シート上にある図形(四角形 1)を、選択状態にあるセルの上に移動させることができます。 Sub test() Dim seru As Range On Error GoTo Errorline Set seru = Range(ActiveCell.Address) ActiveSheet.Shapes("四角形 1").Select With Selection.ShapeRange .Left = seru.Left .Top = seru.Top End With Errorline: End Sub 移動ではなくコピーにするには、どう変えればいいでしょうか?

  • EXCEL2007で、回転された図を任意の場所に設定できない

    回転させた図を任意の場所に配置させたいのですが、EXCEL2007になってからShapeRange.Top/Leftに負の値が設定できなくなってしまったようで、任意の場所に配置できなくなってしまいました。 幸いIncrementTopやIncrementLeftには負の値が設定可能なようなのですが、Excel2003の場合とExcel2007の場合で動作が違うことには変わりなく、Excel2003ではTop/Leftの設定だけで済んだものがExce2007ではTop/Leftである程度の基準位置を設定したあと、さらにIncrementTop/IncrementLeftで補正の必要があるように思います。 こんなやり方をしないと図の配置はできないのでしょうか? 具体的には、マクロにて横長や縦長の長方形の図形を挿入し、位置を指定するのですが、図を回転した場合でもTop/Leftは、回転前の図のTop/Leftを設定するので、横長の図を90度回転させ縦長にした場合には、Leftに0を設定しても、回転後の結果の図は左端にはよっておらず、(元の図の横幅-元の図の縦幅)÷2の分だけ空いてしまいます。 なので、EXCEL2003では求められた空きの分だけLeftに負の値を設定するだけでよかったのですが、EXCEL2007ではLeftに負の値が設定できなくなっており、左端に寄せる事が不可能になっています。 以下、現象確認のための簡単なサンプルのマクロを示します。 '縦長の場合です ActiveSheet.Pictures.Insert("C:\TEMP\BITMAP.BMP").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 700 Selection.ShapeRange.Width = 100 Selection.ShapeRange.Rotation = 90# Selection.ShapeRange.Top = Range("B2").Top Selection.ShapeRange.Left = Range("B2").Left '横長の場合です ActiveSheet.Pictures.Insert("C:\TEMP\BITMAP.BMP").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 100 Selection.ShapeRange.Width = 700 Selection.ShapeRange.Rotation = 90# Selection.ShapeRange.Top = Range("B2").Top Selection.ShapeRange.Left = Range("B2").Left 内容はなんでもいいのでBITMAP.BMPという図のファイルを用意してください。 上記マクロは"B2"のセル位置が図形の左上を原点とするようにしたいのですが、全く違うところに図が配置されます。

  • 画像をアクティブセルの左上隅に配置し任意のセルに

    画像をアクティブセルの左上隅に配置し任意のセルにその画像ファイル名を自動で入力したいです やりたいことは以下になります 例えば画像をアクティブセル(D2)の左上隅に貼り付けて 貼り付けた画像のファイル名をC2に自動で入力をしたいです ファイル名に関しては拡張子も明記するコードとしないコード二つご教授して頂けると大変嬉しいです 下記のコード二つを組み合わせればできそうなんですが どのようにしたらいいのか分かりません よろしくお願いします Sub 図形挿入() Dim FilePath As Variant FilePath = Application.GetOpenFilename(",*.png") If Not FilePath = False Then ActiveSheet.Pictures.Insert(FilePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = Selection.ShapeRange.Width * 1# Selection.ShapeRange.Left = ActiveCell.Left + 2.25 Selection.ShapeRange.Top = ActiveCell.Top + 2.25 With Selection.ShapeRange.Line .Weight = 2.25 '線の太さを2.25に .ForeColor.RGB = RGB(255, 0, 0) '赤枠に End With End If End Sub Sub ファイル名をセルに入力() Dim OpenFileName As String Dim tmp As Variant OpenFileName = Application.GetOpenFilename(FileFilter:="画像 ,*.png; *.jpg; *.gif; *.bmp", Title:="ファイルの選択") If OpenFileName <> "False" Then tmp = Split(OpenFileName, "\") Range("C2").Value = tmp(UBound(tmp)) End If End Sub

専門家に質問してみよう