やりたいこと:
大量にあるリンクされた画像を埋め込み画像に変えたいです。
検索したところ、画像をコピー→貼り付けでリンクが切れるということを知り、実際にその方法でできることを確認しています。
困っていること:
下記コードが安定して動作してくれません。
問題なく処理してくれるときもあれば、「pic.select」のところで「オブジェクトが必要です」となるときもあり、なぜこのエラーが出てしまうのかがわからない状況です。
体感では10回に1回成功するかどうかぐらいで、エラーがでるときのほうが圧倒的に高いです。
このコードを大量のブックに対して実行したいため、毎回複数回トライするという手法は取りたくありません。
pic.Selectを消すと、pic.Copyのところでエラーが出ます。
変数は省略していますが全て宣言しています。
Set MainXl = Workbooks.Open(処理したいブック)
Set MainSheet = MainXl.Sheets(処理したいシート番号)
i = 1
For Each pic In MainSheet.Shapes
'埋め込みファイルだったらスキップ。ここでエラーが出たことはない
If pic.Type = msoEmbeddedOLEObject Then
GoTo skipLoop
End If
Set oriPicCell = pic.TopLeftCell 'ここでもエラーはでない
'それ以外の画像はコピーしてPNG貼り付け
pic.select 'エラーが出るときは必ずここで出る
pic.Copy
oriPicCell.Select
MainSheet.PasteSpecial Format:="Picture (PNG)", link:=False
pic.Delete
i = i + 1
skipLoop: '埋め込みファイルはここまでスキップ
Next
End Sub