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

word2003(windows2000)で使っていたマクロを、人に頼まれてその人の2007のword(windowsXP)に入れたのですがエラーが出て動かないそうです。
マクロは以下のページにあったものの改造で、どこを直したらよいのかわかりません。
http://oshiete.goo.ne.jp/qa/2344318.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

A 回答 (1件)

私は、Word2007以降を未だに使ったことがないので、回答を


しないでおこうと思ったのですが、他の回答が付かないみたい
なので、簡単なアドバイスだけをしますね。

Word2007以降は、オートシェイプと画像などの図との関係が
少し変わってきていますので、マクロ記録を取った場合でも、
一部違う項目が追加されていることがあります。

今回の場合も、もしかしたらWord2007にて追加されたものが
影響しているのかもしれませんね。
http://msdn.microsoft.com/en-us/library/bb257205 …
http://msdn.microsoft.com/en-us/library/bb257749 …

私が回答をした過去ログですが、質問者の補足にある内容が
少しは参考になるかもしれませんね。(No.4の回答への補足)
http://oshiete.goo.ne.jp/qa/6834777.html

この回答への補足

自己解決しました。
あれからやっと2010を入手したので見てみたところ、使っていた方のWordで2003では画像を貼りつけた時の既定値を「前面」にしていたところを、2007ではその設定をせずに、「行内」にして使っていたためと判明しました…。バージョンの違いではなかったようです。お騒がせしました。

またそれとは別な問題なのですが、
「clp = ActiveDocument.Shapes.Count 'すべてのshapeを数える
Set MyShape = ActiveDocument.Shapes(clp) '最後にペーストしたshape」
の部分がうまく働かなくなっていました。2003では図を貼り付けるとそれにshapesの中で一番新しい数字が振られていたのですが、2010ではそうとは限らないようで、別の図が動いてしまう事態に陥りました。こちらの原因がバージョンによるものかどうかわかりませんが、今までの図には名前をつけて区別してから貼り付けることで解決しました。

補足日時:2012/11/11 17:12
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えていただいたページを見たのですが、.Heightプロパティ自体は「Returns or sets the height of the specified shape range. Read/write Single.」とのことでそのまま残っているようです。
エラーの内容から.Heightの取得に失敗してそうなんですが、それが2007の影響なのかなと思います。
(.HeightRelativeがアヤシイ?)
私も手元に2007がないもので、試行錯誤が出来ず未だ解決しておりません…

お礼日時:2011/10/31 10:14

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