Run-time error '1004': Microsoft Excel cannot paste the data

前端 未结 3 643
广开言路
广开言路 2021-01-27 13:30

I have looked up the question and have seen several solutions addressing things like Select or having protected worksheets, none of which apply to me here.

For various

相关标签:
3条回答
  • 2021-01-27 14:00

    Just wanted to let everyone know I have found a (sort of) solution. Based on the answers/comments from Tim Williams and PeterT I modified the code to look like this:

    Sub CopyAllShapes()
    Dim ws As Worksheet
    
    ' Sets the non-generated worksheets as an array
    nSheets = Array("EXAMPLE", "Weekly Totals", "Menu")
    
    ' Copies the Picture from the EXAMPLE sheet to all worksheets not in the array and then assigns a 
    ' seperate Macro called "Export" to the picture on each of these sheets.
    For Each ws In ActiveWorkbook.Worksheets
        If Not IsNumeric(Application.Match(ws.Name, nSheets,0)) Then
            Sheets("EXAMPLE").Shapes("Picture 1").Copy
        On Error Resume Next
            ws.Range("J62").PasteSpecial
        On Error Goto 0
            ws.Shapes("Picture 1").OnAction = "Export"
        End If
    Next ws
    
    Application.CutCopyMode = xlCopy
    End Sub
    

    This has successfully ignored the error and everything is working properly now! Thanks everyone for your help, hopefully this aids someone else in the future!

    0 讨论(0)
  • 2021-01-27 14:00

    On moving to Office 365 and Win10 (can't say which of those was the culprit) I found a bunch of existing macros which would give that same error when trying to paste a copied image onto a worksheet.

    When entering debug, the "paste" line would be highlighted, but if I hit "Continue" it would (after one or two attempts) run with no errors.

    I ended up doing this:

    'paste problem fix
    Sub PastePicRetry(rng As Range)
        Dim i As Long
        Do While i < 20
            On Error Resume Next
            rng.PasteSpecial
            If Err.Number <> 0 Then
                Debug.Print "Paste failed", i
                DoEvents
                i = i + 1
            Else
                Exit Do
            End If
            On Error GoTo 0
            i = i + 1
        Loop
    End Sub
    

    ...which looks like overkill but was the only reliable fix for the problem.

    EDIT: cleaned up and refactored into a standalone sub.

    0 讨论(0)
  • 2021-01-27 14:12

    Not a pure fix, but this code will retry the Copy/Paste if it fails (up to 3 times), instead of just dropping it:

    Const MaxRetries AS Long = 3
    
    Sub CopyAllShapes()
        Dim ws As Worksheet
        Dim TimesRetried As Long
    
        ' Sets the non-generated worksheets as an array
        nSheets = Array("EXAMPLE", "Weekly Totals", "Menu")
    
        ' Copies the Picture from the EXAMPLE sheet to all worksheets not in the array and then assigns a 
        ' seperate Macro called "Export" to the picture on each of these sheets.
        For Each ws In ActiveWorkbook.Worksheets
            If Not IsNumeric(Application.Match(ws.Name, nSheets,0)) Then
                TimesRetried = 0
    CopyExampleShape:
                On Error Resume Next
                Sheets("EXAMPLE").Shapes("Picture 1").Copy
                ws.Range("J62").PasteSpecial
                'If the Copy/Paste fails, retry
                If Err Then
                    On Error GoTo -1 'Clear the Error
                    'Don't get stuck in an infinite loop
                    If TimesRetried < MaxRetries Then
                        'Retry the Copy/paste
                        TimesRetried = TimesRetried + 1
                        DoEvents
                        GoTo CopyExampleShape
                    End If
                End If
                On Error GoTo 0
                ws.Shapes("Picture 1").OnAction = "Export"
            End If
        Next ws
    
        Application.CutCopyMode = xlCopy
    End Sub
    

    I have come across a similar issue before, and it was been down to another program (in one case Skype) reacting to data being added to the Clipboard by "inspecting" it. That then briefly locked the clipboard, so the Paste/PasteSpecial operation failed. This then caused the Clipboard to be wiped clean... All without Excel doing anything wrong.

    "It is possible to commit no mistakes and still lose. That is not a weakness; that is life." ~ Jean-Luc Picard

    0 讨论(0)
提交回复
热议问题