14歳の自分に衝撃の事実を告げてください

いつも参考にさせていただいています。 当方Win-10Pro EXCEL2016の環境です。
毎朝EXCELをタスクスケジュラーで起動させ、グラフを画像(JPG形式)で保存して、スクリーンセーバーの写真モードで複数のグラフを切り替えながら表示させようと思っています。
ステップインで実行すると、JPGファイルはグラフが入ったが画像になりますが、通常実行だと白紙の画像になってしまいます。 コードの途中で、Wait や Sleep を入れてもうまく行きません。
うまく行く方法をご教示ください。

<ThisWorkBook>
Private Sub Workbook_Open()
’グラフ画像化
Call imagesave
’EXCELを閉じる
Application.Quit
End Sub

<標準モジュール>
Option Explicit

Sub imagesave()
Dim myPrintArea As Range
Dim myCharts As Chart
Dim Filename As String
Dim cnt As Integer
Const myPass As String = "C:/utl/記録表/"

'保存ファイル名を設定
Filename = myPass & "5.kiroku.JPG"

'選択範囲を取得
Set myPrintArea = ThisWorkbook.Sheets("記録表").Range("Print_Area")

'選択した範囲を画像形式でコピー
myPrintArea.CopyPicture appearance:=xlScreen, Format:=xlPicture

'画像貼り付け用の埋め込みグラフを作成
Set myCharts = ActiveSheet.ChartObjects.Add(0, 0, myPrintArea.Width, myPrintArea.Height).Chart

'埋め込みグラフに貼り付ける
myCharts.Paste

'JPEG形式で保存
myCharts.Export Filename:=Filename, filtername:="JPG"

'埋め込みグラフを削除
myCharts.Parent.Delete

End Sub

実際は複数のシートのグラフをすべて画像で保存しようと思っていますが、割愛して一つだけに
しました。 それでもうまく行きません。
処理が速すぎて、画像処理が追い付かないのと思い、途中で wait や Sleep を 10秒程度いれて
見ましたが、いずれもダメでした。

A 回答 (3件)

こんにちは



試してみましたが、Pasteメソッドの際にChartを明示的にアクティブにしておかないとうまくペーストできないようですね。(はっきりとは確認していませんが・・)

>myCharts.Paste
の前に1行追加して、
 myCharts.Parent.Activate
 myCharts.Paste
としたらうまく動作しませんか?
    • good
    • 1
この回答へのお礼

ありがとう

myCharts.Pasteの前に myCharts.Parent.Activate を1行追加した
ところうまく行きました。 ありがとうございました。 助かりました。

お礼日時:2022/08/30 14:44

あれ?回答消えましたかね、、DoEvents

    • good
    • 0

こんにちは。



doevents 入れてもダメですかね?

ダメならExcelを閉じる前に無限ループでファイルの存在確認を入れてみては?

do
  if dir(ファイルパス)<>"' then
    exit do
  end if
  doevents
loop

動作未検証です。
    • good
    • 0
この回答へのお礼

うーん・・・

doevents 入れてもダメでした。
ファイル数が24個なら、プロシジャーの最後まで実施されるが、画像ファイルは白紙
ファイル数が48個なら、30分経っても画像ファイルが作られません。
ALT+F11 で Microsoft Visual Basic for Applications - [Module1(コード)]
になったまま停止。  ■のリセットボタンを押すと
Microsoft Visual Basic for Applications -[ブック名]- [Module1(コード)]
となる。

お礼日時:2022/08/30 14:37

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

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


おすすめ情報