実行時エラー'1004'が発生します。

EXCEL上で図形を配置し、範囲指定をして、その部分を画像ファイル化するマクロを何回か動作させると、

実行時エラー'1004'worksheetクラスのpasteメソッドが失敗しました。

実行時エラー'1004'RangeクラスのCopyPictureメソッドが失敗しました。

というエラーが表示され、図形がない空白の画像ファイルが作成されます。

その現象が起こるのは、特定のPCに限られています。

インストール時等で、なにか不足しているものがあったりするのでしょうか。

マクロは以下の内容です。

---------------------------------------------------------------------------------------------------------------

Sub 画像として保存()
    Dim m_SavePath As String
    
    m_SavePath = Application.GetSaveAsFilename(, "PNGファイル (*.png), *.png")
    If m_SavePath <> "False" Then
        Call SaveSelectionAsImage(m_SavePath)
    End If

End Sub

Public Sub SaveSelectionAsImage(ByVal argSavePath As String)
    Dim m_Width As Double, m_Height As Double
         
    ' 選択範囲を画像としてコピー
    'Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
     
    ' 一旦シートに貼り付け
    'ActiveSheet.Paste

    If Len(argSavePath) > 0 Then
        'Application.ScreenUpdating = False
        Selection.CopyPicture xlScreen, xlBitmap
        ActiveSheet.Paste
        With Selection
            m_Width = .Width + 8: m_Height = .Height + 8
            .CopyPicture xlScreen, xlBitmap
            .Delete
        End With
        On Error Resume Next
        With ActiveSheet.ChartObjects.Add(0, 0, m_Width, m_Height).Chart
            .Paste
            .ChartArea.Border.LineStyle = 0
            .Export argSavePath, "PNG"
            .Parent.Delete
        End With
        On Error GoTo 0
        Application.ScreenUpdating = True
    End If
    
End Sub

---------------------------------------------------------------------------------------------------------------

ご教授、よろしくお願いいたします。

|

特定のPCのみで貼り付け時にエラーが出たりするのは、外部アプリケーションが悪さしている可能性があります。そのPCの環境を見直してみて下さい。

この回答が役に立ちましたか?

役に立ちませんでした。

素晴らしい!フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

古い質問ですが、ネット上に解決方法の記載がほとんど無いようなので。

CopyPictureメソッドはセル範囲のコピーを行い即座に図に変換してクリップボードに送る仕組みですが、この「セル範囲のコピー」に失敗した場合に1004エラーとなる模様です。

Copy処理の完了前に次の処理に入ってしまいエラーとなると考えると良いかと。

PCの性能や環境でマクロの実行速度が違うため、PCによって発生したりしなかったりするようですね。発生するかどうか見分けるのはMicrosoftのエンジニアでも十中八九不可能です。

CopyPictureではなく、Copyメソッドを使い、

Selection.Copy

DoEvents

Pictures.Paste(Link:=False)

と変更し、これでCopyでは素通りするがPaste時にエラーとなる場合はマクロ冒頭に

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

を記述、Sleepコマンドを有効にし、

Selection.Copy

DoEvents

Sleep (100)

でDoEvents後に0.1秒の猶予を持たせる方法である程度回避可能です。

これでも再発するならば「On Error Goto ~」と「Resume ~」を使い、

エラー発生時にはコピー直前のラベルにResumeしてコピーをやり直して再度Pasteという手が考えられます。

19 ユーザーがこの回答を役に立ったと思いました。

この回答が役に立ちましたか?

役に立ちませんでした。

素晴らしい!フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

 
 

質問情報


2021年7月15日最終更新日 表示数 12,869 適用先: