画像挿入(Pictures.Insert メソッド)でリンク切れになったファイルをゴリ押しで復活させるマクロを作った。(妥協編・完)
おじさん、初めてマクロを作る。ソース乗っけてますけど、責任は負わないですよ。一応私の環境では使えました。
【原点に戻る】
この問題のあるファイルなんだが、作ったパソコンでなら画像が見ることができる。
クリップボードにコピーして、形式を選択してJPEGで貼り付けという作業をしさえすれば、画像ファイルは埋め込める。
その作業を手作業でやるか、マクロでやるかで妥協することにした。
【クリップボードコピー&貼り付け・元データ消去の作業】
面倒なので、Excelでマクロの記録をさせてみた。
Sub Macro2()
ActiveSheet.Shapes.Range(Array(“図 6″)).Select←画像オブジェクトを認識するコマンド。
Selection.Copy←画像オブジェクトをコピーするコマンド。
ActiveSheet.PasteSpecial Format:=”図 (JPEG)”, Link:=False, DisplayAsIcon:= _
False ←クリップボードからJPEG形式で保存するコマンド
Selection.ShapeRange.ZOrder msoSendToBack←貼付したJPEGを背面に移動させるコマンド
ActiveSheet.Shapes.Range(Array(“図 6”)).Select←元のデータを選択するコマンド
Selection.Delete←消すコマンド
End Sub
こういう流れのようだ。
これを基本にマクロを作ってやれば良い。問題は以下の通り。
①図6とかいう任意の選択を何とかしてやらなければならない。ファイルによって図番号が異なるらしい。
②一枚のシートに複数枚の画像データが貼られている。ループで処理をかける必要がある。
【リンクされた図・画像を削除するExcelマクロをぱくるの巻】
どちらにしてもリンクされた図を削除しないと先に進めないことは明白だったので、Googleさんに検索して貰った。
ヒットしましたよ!
リンクされた図・画像を削除するExcelマクロ:エクセルマクロ・Excel VBAの使い方-Shapeオブジェクト
こいつを走らせると、リンクされた図は全部消してくれる単純なマクロである。
ありがとう・・・こいつと、さっきのを組み合わせて、完成させよう。
【「リンク画像クリップボード貼付」マクロの完成】
組み込んで切って張って作ったのがこのマクロ。格好が悪いけど背に腹は代えられぬ。
Sub リンク画像クリップボード貼付()
Dim shp As Shape ←なんだろうこれ(恥ずかしい)
For Each shp In ActiveSheet.Shapes ←図形をアクティブにする。
If shp.Type = msoLinkedPicture Then ←もしリンク貼り付けの画像だったら・・・
shp.Select ←認識させて
Selection.Copy ←コピーして
ActiveSheet.PasteSpecial Format:=”図 (JPEG)”, Link:=False, DisplayAsIcon:= _
False ←形式を選択してリンクを切って貼付
shp.Delete ←図は削除
End If
Next ←終わるまで繰り返し
End Sub
はい。できあがり。Excelのマクロってしょぼくても結構楽しい。
じゃあ300ファイルやっちゃいましょう。【完】
【追記】
先人が同じことをやっておられました。
Excel2010でPictures.Insertメソッドで画像貼ったらリンクが付く不具合の対象法 – 車とバイクと人生と