質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

0回答

895閲覧

ワードマクロの実行結果が変わってしまう

pia

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/06/11 07:37

前提・実現したいこと

word上に貼り付けている画像を、大きさやトリミングそのままで差し替えるマクロが、期待通り動く時と動かない時があるので原因を突き止めたい。

発生している問題・エラーメッセージ

期待通り動かない場合、ステップ実行するとどうもトリミングがうまくいっていないようなのですが、原因がわからず困っています。

該当のソースコード

https://oshiete.goo.ne.jp/qa/2344318.htmlのmisatoannaさんのコードをもとに、トリミング等を追加しています。
旧画像の位置や大きさを取得→旧画像を削除→新画像を挿入→新画像に取得した設定を反映
という流れです。
マクロはクイックアクセスツールバー上のボタンから実行しています。

wordVBA

1Dim 画像フラグ As Integer 2 3Sub ChgPic(control As IRibbonControl) 4 5 Dim T, L, h, w, r, sh, cl, cr, ct, CB 6 Dim FName As String 7 Dim MyShape As Shape 8 Dim fd As FileDialog 9 Z = 0 '最背面に移動、0はしない 10 sen = 0 '線をつけるかどうか、0はなし 11 Application.ScreenUpdating = False 12 13 With Selection.ShapeRange 14 With .PictureFormat 15 '現在の画像のトリム範囲を取得 16 cl = .CropLeft 17 cr = .CropRight 18 ct = .CropTop 19 CB = .CropBottom 20' cpx = .Crop.PictureOffsetX 21' cpy = .Crop.PictureOffsetY 22' cph = .Crop.PictureHeight 23' cpw = .Crop.PictureWidth 24' End With 25 26 'トリム解除してみる 変化なし? 27 .CropLeft = 0 28 .CropRight = 0 29 .CropTop = 0 30 .CropBottom = 0 31 End With 32 33 '現在の画像の位置と大きさを取得 34 T = .Top 35 L = .Left 36 h = .Height 37 w = .Width 38 r = .Rotation 39 40 '現在の画像の相対位置を取得 41 posi = .RelativeVerticalPosition 42 posiyoko = .RelativeHorizontalPosition 43 44 End With 45 46 Set myRange = Selection.Range '現在のオブジェクトをRangeにしまう 47 48 Selection.Delete 49 50 With Application.FileDialog(msoFileDialogFilePicker) 51 52 If 画像フラグ = 0 Then 53 .InitialFileName = ActiveDocument.Path 54 End If 55 画像フラグ = 画像フラグ + 1 56 If .Show = -1 Then 'ダイアログから選択したら 57 58 'FileDialogSelectedItems コレクション内の最初の文字列を調べます。 59 myFileName = .SelectedItems(1) 60 61 Set MyShape = ActiveDocument.Shapes.AddPicture(FileName:=myFileName, _ 62LinkToFile:=False, SaveWithDocument:=True, Anchor:=myRange) 63 64 MyShape.Select 65 Set myRange = Nothing 66 67 With Selection 68 With .ShapeRange 69 .LockAspectRatio = True 70 .Rotation = r 71 72 .Width = w 73 .Height = h 74 .Top = T 75 .Left = L 76 77 With .PictureFormat 78' .Crop.PictureHeight = cph 79' .Crop.PictureWidth = cpw 80' .Crop.PictureOffsetX = cpx 81' .Crop.PictureOffsetY = cpy 82 .CropLeft = cl 83 .CropRight = cr 84 .CropTop = ct 85 .CropBottom = CB 86 End With 87 88 .RelativeVerticalPosition = posi 89 .RelativeHorizontalPosition = posiyoko 90 91 If sen = 1 Then 92 With .Line 93 .ForeColor.ObjectThemeColor = wdThemeColorBackground1 94 .ForeColor.TintAndShade = -0.75 95 .Visible = msoTrue 96 End With 97 End If 98 99 If Z = 1 Then 100 .ZOrder msoSendToBack '最背面へ 101 End If 102 End With 103 End With 104 105 Else 'ユーザーが [キャンセル] をクリックした場合 106 End If 107 End With 108 Application.ScreenUpdating = True 109 110End Sub

試したこと

・レイアウトの詳細設定を疑ってみる
位置は「文字列と一緒に移動する」「オーバーラップさせる」
文字列の折り返しは前面
サイズは100%、「縦横比を固定する」「元のサイズを基準にする」にチェックが入っており、正常に動く画像と設定は同じでした。

・.Crop.PictureHeight等の取得→反映をしてみる
解決しなかったので現在はコメントアウトしています。

・トリムを解除してから設定を取得するように変えてみる
「 'トリム解除してみる 変化なし?」以下5行を追加してみましたが変わらず…

補足情報(FW/ツールのバージョンなど)

word2000くらいの頃からoffice365の現在まで使ってきました。概ね期待通り動くので今まで問題を放置してしまっていました。
コードが悪いのか、他に悪いところがあるのかも判断がつかず、コードが合っているかどうか見ていただけないかと思った次第です。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問