プロが教えるわが家の防犯対策術!

Excel VBAについての質問です。
タイトルの通り、指定範囲(Range("A1:AJ58"))を画像で保存するマクロを作成したいです。
保存先はブックと同じパスです。

Chart.Exportで画像通りのエラーが出てしまいます。
'Export'メソッドは失敗しました'Chart'オブジェクト

どのように変更すればよいでしょうか。

よろしくお願いいたします。



Sub PNG出力()
Dim FileSize As Long
Dim pic As ChartObject
Dim picName As String: picName = ActiveWorkbook.Path & "\" & Range("C3") & ".png"
Dim rng As Range: Set rng = Range("A1:AJ58")

'■セル範囲を画像データでコピーする。
rng.CopyPicture

'■指定したセル範囲と同じサイズのpicを新規作成し、保存する。
Set pic = ActiveSheet.ChartObjects.Add(0, 0, rng.Width, rng.Height)
pic.Chart.Export ThisWorkbook.Path & picName 'ここでエラー
FileSize = FileLen(ThisWorkbook.Path & picName)

'■picのFileSizeを超えるまでループする(画像データが出来上がったら終了する)
Do Until FileLen(ThisWorkbook.Path & picName) > FileSize
pic.Chart.Paste
pic.Chart.Export ThisWorkbook.Path & picName
DoEvents
Loop
'■作成完了後、pic削除。
pic.Delete
Set pic = Nothing

End Sub

「【VBA】Excelの特定範囲のセルを画」の質問画像

質問者からの補足コメント

  • 失礼しました。ご指摘ありがとうございます。

    パスを追加していない状態で再度試してみましたが、同じエラーがでました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/01/30 09:21

A 回答 (2件)

こんにちは



エクセルのバージョンによって多少違いがあるみたいですね。
ご提示のコードでは2度保存しているようですが、理由がよくわかりませんね。

従来のエクセルでは図の保存ができなかったので、いろいろな方法が考えられていますが、もしもOffice365をご利用なら、365では「図として保存」がサポートされているようですので、そちらをご利用になるのが宜しいと思います。
(当方、Win10、Excel2019環境なので確認はできていませんが・・)

さて、ご質問の件ですが、ご提示のコードのオリジナル(?)になっていると思われる以下のソースで実行してみたところ、当方の環境では問題なく動作しました。
https://teratail.com/questions/105469
(CopyPictureでエラーがでましたが、フォーマットをbitmapにすることで解決)


どうしても上手くいかない場合は、一旦、xlsxで保存して、zip形式で対象画像を探すという方法もあるようです。(こちらは動作確認していません)
https://www.shegolab.jp/entry/excel-macro-save-i …
    • good
    • 0
この回答へのお礼

遅くなってしまい申し訳ございません。
ご回答ありがとうございます。
図として保存ならできそうですが、やはりマクロにするのは難しそうですね。。。

お礼日時:2023/01/31 11:50

>picName = ActiveWorkbook.Path & "\" & Range("C3") & ".png"



変数picName はフルパスが設定されていますよね?


>pic.Chart.Export ThisWorkbook.Path & picName 'ここでエラー

Exportする際、頭にパスを追加しているのは何故ですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています