pastespecial 메서드가 때때로 오류 1004를 발생시키고 다른 경우에는 발생하지 않는 이유는 무엇입니까?

Nov 17 2020

과제 : 여러 워크 시트의 데이터를 하나의 워크 시트에 복사하고 첫 번째 행을 제외한 테이블의 모든 데이터를 복사하고 싶습니다.

문제 : PasteSpecial이 때때로 오류 1004 "범위 클래스의 Pastespecial 메서드가 실패했습니다"와 함께 실패하는 이유를 알아내는 데 문제가 있습니다. "디버그"를 클릭 한 다음 다시 시작하면 코드가 계속해서 작동하고 복사 할 수 있다는 것이 이상합니다. 프로세스를 통해이 작업을 여러 번 수행하면 끝까지 도달합니다.

내가 시도한 것 : .paste와 같은 다른 붙여 넣기 모드를 시도하고 activate 및 select 문을 추가했습니다.

이 이상한 동작이 왜 발생하고 어떻게 고칠 수 있는지 아십니까?

내 코드는 다음과 같습니다.


Sub RunOnAllFilesInFolder()

    Dim folderName As String, eApp As Excel.Application, fileName As String
    Dim wb As Workbook, ws As Worksheet, currWs As Worksheet, currWb As Workbook
    Dim sht As Worksheet
    Dim fDialog As Object: Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
    Dim LastRowWb As Integer, LastRow As Integer
    Dim eof As Integer
    
    Set currWb = ActiveWorkbook: Set currWs = ActiveSheet
    
    
    Set ws = ThisWorkbook.Worksheets("Artikelliste")
    
 
    fDialog.Title = "Select a folder"
    fDialog.InitialFileName = currWb.Path
    If fDialog.Show = -1 Then
      folderName = fDialog.SelectedItems(1)
    End If
    
    
    Set eApp = New Excel.Application:  eApp.Visible = False
    
    fileName = Dir(folderName & "\*.*")
    
     LastRow = 2
    
    Do While fileName <> ""
        'Update status bar to indicate progress
        Application.StatusBar = "Processing " & folderName & "\" & fileName
 
 
        Set wb = eApp.Workbooks.Open(folderName & "\" & fileName)
        Set sht = wb.Worksheets("Tabelle1")
        
        LastRowWb = sht.Cells(sht.Rows.Count, "B").End(xlUp).Row
        
        
        sht.Activate
        sht.Range("A2" & ":" & "AM" & LastRowWb).Copy
        
        ws.Range("A" & LastRow).PasteSpecial Paste:=xlPasteFormats
        ws.Cells(LastRow, 15).Value = fileName
        

        ThisWorkbook.Save
        LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row + 1

        eApp.CutCopyMode = False
        
        wb.Close SaveChanges:=False 
        Debug.Print "Processed " & folderName & "\" & fileName
        fileName = Dir()
    Loop
    
    eApp.Quit
    Set eApp = Nothing
    Application.DisplayAlerts = True
    
    Application.StatusBar = ""
    MsgBox "Completed executing macro on all workbooks"
    
    
End Sub

답변

1 SiddharthRout Nov 17 2020 at 18:05

이 이상한 동작이 왜 발생하고 어떻게 고칠 수 있는지 아십니까?

  1. Excel에는 클립 보드를 지우는 기묘한 습관이 있으므로 복사 및 붙여 넣기 작업 사이에 다른 작업을 수행하지 않는 것이 좋습니다.

  2. 클립 보드에 데이터를 저장할 시간을 Excel에 제공해야합니다. 특히 루프에서 복사-붙여 넣기 작업을 수행하려고 할 때.

이 시도

sht.Range("A2:AM" & LastRowWb).Copy
DoEvents
ws.Range("A" & LastRow).PasteSpecial Paste:=xlPasteFormats

참고 로 Excel VBA에서 선택을 사용하지 않는 방법 에 대해서도 읽어 볼 수 있습니다.