• 締切済み

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

みんなの回答

回答No.1

私は、Word2007以降を未だに使ったことがないので、回答を しないでおこうと思ったのですが、他の回答が付かないみたい なので、簡単なアドバイスだけをしますね。 Word2007以降は、オートシェイプと画像などの図との関係が 少し変わってきていますので、マクロ記録を取った場合でも、 一部違う項目が追加されていることがあります。 今回の場合も、もしかしたらWord2007にて追加されたものが 影響しているのかもしれませんね。 http://msdn.microsoft.com/en-us/library/bb257205(v=office.12).aspx http://msdn.microsoft.com/en-us/library/bb257749(v=office.12).aspx 私が回答をした過去ログですが、質問者の補足にある内容が 少しは参考になるかもしれませんね。(No.4の回答への補足) http://okwave.jp/qa/q6834777.html

wbx
質問者

お礼

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

wbx
質問者

補足

自己解決しました。 あれからやっと2010を入手したので見てみたところ、使っていた方のWordで2003では画像を貼りつけた時の既定値を「前面」にしていたところを、2007ではその設定をせずに、「行内」にして使っていたためと判明しました…。バージョンの違いではなかったようです。お騒がせしました。 またそれとは別な問題なのですが、 「clp = ActiveDocument.Shapes.Count 'すべてのshapeを数える Set MyShape = ActiveDocument.Shapes(clp) '最後にペーストしたshape」 の部分がうまく働かなくなっていました。2003では図を貼り付けるとそれにshapesの中で一番新しい数字が振られていたのですが、2010ではそうとは限らないようで、別の図が動いてしまう事態に陥りました。こちらの原因がバージョンによるものかどうかわかりませんが、今までの図には名前をつけて区別してから貼り付けることで解決しました。