
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件)
- 最新から表示
- 回答順に表示
No.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ではそうとは限らないようで、別の図が動いてしまう事態に陥りました。こちらの原因がバージョンによるものかどうかわかりませんが、今までの図には名前をつけて区別してから貼り付けることで解決しました。
ありがとうございます。
教えていただいたページを見たのですが、.Heightプロパティ自体は「Returns or sets the height of the specified shape range. Read/write Single.」とのことでそのまま残っているようです。
エラーの内容から.Heightの取得に失敗してそうなんですが、それが2007の影響なのかなと思います。
(.HeightRelativeがアヤシイ?)
私も手元に2007がないもので、試行錯誤が出来ず未だ解決しておりません…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
マクロについて教えてください...
-
実行時エラー -'-2147417848
-
ADODB.Streamを使用してUTF-8を...
-
エクセルエラー13型が一致しま...
-
インデックスが有効範囲にあり...
-
【マクロ】エラー【#DIV/0!】が...
-
OLEDB.NETで接続できない
-
VBAのエラー発生場所をメッセー...
-
VBS実行時エラー オブジェクト...
-
トランスポートレベルのエラー
-
VBからoo4o接続でストアドを呼...
-
AccessVBAでExcelを起動し、罫...
-
VB6+SQL サーバー 2000 で 実行...
-
アプリケーション定義またはオ...
-
カーソルオープンでエラー(ORA...
-
SQL実行エラー
-
VBAエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
実行時エラー -'-2147417848
-
実行時エラー48発生時のDLL特定...
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー3001「引数が間違...
-
EXCEL/VBAで、自分のPCだけエラ...
-
VB6+SQL サーバー 2000 で 実行...
-
VBAのエラー発生場所をメッセー...
-
ADODB.Streamを使用してUTF-8を...
-
【Excel VBA】マクロをボタンに...
-
OLEDB.NETで接続できない
-
なぜエラーになるのでしょうか...
-
INSERT INTOステートメント構文...
-
Outlook.ApplicationをCreateOb...
おすすめ情報