次の方法で共有

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

Anonymous
2014-11-13T10:08:14+00:00

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


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

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

2 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2017-06-13T15:20:46+00:00

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

    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という手が考えられます。

    40+ 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2014-11-17T06:08:15+00:00

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

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません