2016-07-15 2 views
0

다른 통합 문서의 데이터를 마스터 통합 문서로 추출하려고했습니다. 이러한 통합 문서는 모두 하나의 폴더에 저장되었습니다. 게다가 데이터를 추출하기 전에 폴더의 파일 수를 확인합니다. 파일이 하나 뿐이며 마스터 통합 문서 일 경우 중지되고 종료됩니다.Excel 매크로 런타임 1004 문서가 읽기 전용 일 수 있습니다.

그러나 매크로를 실행하면 "Do while"루프에 걸렸습니다. 그런 다음 런타임 오류 1004가 발생하며 문서가 읽기 전용이거나 암호화 된 것일 수 있습니다 1.

경로가 정확한지 확인합니다.

아래 코드는 제 코드입니다. 나는 실행 시간을 해결하기 위해 "않지만"어떻게 루프

  • 1004 오류 문제 어디로 갔는지 모르겠어요

    1. Sub LoopThroughDirectory() 
          Dim MyFile As String 
          Dim erow 
          Dim Filepath As String 
          Filepath = "C:\Users\uidq3022\Desktop\Backup_Version2.0_7_12\" 
          MyFile = Dir(Filepath) 
      
          Do While Len(MyFile) > 0 
          If MyFile = "Import Info.xlsm" Then 
           Exit Sub 
          End If 
      
          Workbooks.Open (Filepath & MyFile) 
          Range("F9,F12,F15,F19,F21").Select 
          Range("F21").Activate 
      
          ActiveWindow.SmallScroll Down:=9 
          Range("F9,F12,F15,F19,F21,F27,F30,F33,F37").Select 
          Range("F37").Activate 
      
          ActiveWindow.SmallScroll Down:=9 
          Range("F9,F12,F15,F19,F21,F27,F30,F33,F37,F41").Select 
          Range("F41").Activate 
      
          ActiveWindow.SmallScroll Down:=-27 
          Range("F9,F12,F15,F19,F21,F27,F30,F33,F37,F41,F6").Select 
          Range("F6").Activate 
          Selection.Copy 
          ActiveWorkbook.Close 
      
          erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
          ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 1), Cells(erow, 11)) 
          MyFile = Dir 
          Loop 
      End Sub 
      

      그리고 내 질문이 있습니다.

    누군가가 조언을 해주겠습니까? 고마워요!

  • 답변

    0

    나에게 수동으로 직접하는 대신 루프를 사용하여 파일을 여는 것처럼 보입니다. 런타임에 MyFile = Dir 행이 누락되거나 주석 처리되지 않은 경우 루프가 멈춘 이유를 잘 모릅니다.

    @ 토마스가 대부분 옳다. 원본 통합 문서가 너무 일찍 닫히기 때문에 1004 오류가 발생합니다. 그러나 나는 wkbTarget.worksheets(1).paste을 사용하여 값을 붙여 넣을 수 있었지만 F6에서 F41 사이의 모든 셀을 붙여 넣었습니다. 원하는 것은 아닙니다.

    또한 복사 범위는 11 행, 1 열이지만 1 행, 11 열 : Cells(erow, 1), Cells(erow, 11)의 대상 범위를 지정합니다. 그것이 당신이 정말로 원하는 것이라면, 당신은 use Transpose이어야합니다. Range() 안에 Cells(#,#)을 사용하면 1004 개의 오류가 발생하지만 Cells(#,#).address으로 해결되었습니다.

    Sub LoopThroughDirectory() 
        Dim MyFile As String 
        Dim wkbSource as Workbook 
        Dim wkbTarget as Workbook 
        Dim erow as single 
        Dim Filepath As String 
    
        Filepath = "C:\Users\uidq3022\Desktop\Backup_Version2.0_7_12\" 
        MyFile = Dir(Filepath) 
    
        Set wkbTarget = Workbooks(MyFile)     'Assuming the file is already open 
    
        Do While Len(MyFile) > 0 
        If MyFile = "Import Info.xlsm" Then Goto NextFile 'Skip the file instead of exit the Sub 
    
        Set wkbSource = Workbooks.Open (Filepath & MyFile) 'Set a reference to the file being opened 
        wkbSource.worksheet(1).Range("F9,F12,F15,F19,F21,F27,F30,F33,F37,F41,F6").Select 
        Selection.Copy 
    
        erow = wkbTarget.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
        wkbTarget.Worksheets("Sheet1").Paste Destination:=wkbTarget.Worksheets("Sheet1").Range(Cells(erow, 1).address) 
    
        wkbSource.Close 
    
    NextFile: 
        MyFile = Dir 
    
        Loop 
        End Sub 
    

    토마스의 한 줄 복사 + 붙여 넣기 기술이 잘 간결 :

    여기에 내 걸릴입니다. 이 방법을 사용하기 위해 코드 줄을 재정렬 할 수 있습니다. 소스 및 대상 객체를 명확하게 만들 것을 권장합니다.

    +0

    나는 그것을 놓쳤다. 감사합니다 –

    +0

    @ ThomasInzina, 그것은 나에게도 발생합니다. 나는 우아한 한 줄 복사 + 붙여 넣기를 표절하고 싶지 않았습니다. 다시 기꺼이 올려 주실 수 있습니까? – MJA

    +0

    다시 게시 할 필요가 없습니다. 귀하의 솔루션이 올바른 것입니다. ''wkbTarget.Worksheets ("Sheet1"). 붙여 넣기 '복사하여 붙여 넣기'여야합니다. –