2017-01-24 1 views
1

msoFileDialogFolderPicker를 열려고하는 매크로에 대한 VBA 코드에 문제가있어서 사용자가 모든 Excel 파일을 열고 새로 열리는 통합 문서에서 하나씩 데이터를 복사하여 붙여 넣을 폴더를 선택합니다. 매크로가 실행중인 통합 문서의 특정 시트에 복사합니다. 기본적으로 우리는 각 영업 담당자에게 스프레드 시트를 제공하여 판매를 완료 한 다음 스프레드 시트를 영업 관리자에게 제출합니다. 개인이 각 스프레드 시트를 열고 데이터를 복사하여 하나의 스프레드 시트에 수동으로 붙여 넣지 않고 대신 수행하려는 작업은 나를 위해이 작업을 수행하는 매크로를 사용하는 것입니다. 파일의 위치와 이름이 바뀔 수 있으므로 가능한 한 동적으로 만들려고합니다. 이 작업을 수행하는 더 좋은 방법이있을 수 있으므로 제안 사항은 대단히 감사하겠습니다!하나의 통합 문서에서 다른 통합 문서로 복사하여 붙여 넣으려면 런타임 오류 '1004'가 내 VBA 코드와 함께 나타나는 이유는 무엇입니까?

내가 겪고있는 문제는 파일을 열어서 복사하지만 실행 시간 오류 1004 '범위 클래스 실패 복사'가 발생하여 통합 문서에 붙여 넣으려고 할 때입니다. 매크로를 실행 중입니다. ThisWorkbook 및 ThisWorkbook.Activate 매크로를 실행하는 스프레드 시트로 이동하려면 Excel 있지만 시도하지 시도했지만 아무도 내 문제를 해결했습니다. 때때로 오류가 발생하지만 마스터 통합 문서의 데이터를 붙여 넣지 않습니다. 아래 코드를 작성했습니다. 시피, 대부분 내가 찾은 코드에서 복사되었지만 내 목적에 맞게 수정하려고했습니다. 오류가 발생하는 줄은 "wb1.Worksheets (1) .Range ("A5 ")입니다."줄을 선택하십시오.

Sub LoopAllExcelFilesInFolder() 

    Dim wb As Workbook 
    Dim wb1 As Workbook 
    Dim myPath As String 
    Dim myFile As String 
    Dim myExtension As String 
    Dim FldrPicker As FileDialog 

Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.Calculation = xlCalculationManual 

Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker) 

    With FldrPicker 
    .Title = "Select A Target Folder" 
    .AllowMultiSelect = False 
     If .Show <> -1 Then GoTo NextCode 
     myPath = .SelectedItems(1) & "\" 
    End With 


NextCode: 
    myPath = myPath 
    If myPath = "" Then GoTo ResetSettings 

myExtension = "*.xls*" 

myFile = Dir(myPath & myExtension) 

Do While myFile <> "" 
    Set wb = Workbooks.Open(Filename:=myPath & myFile) 
    Set wb1 = ThisWorkbook 

    Do events 

    wb.Worksheets(1).Range("A5:H28").Select 
Selection.Copy 
    wb1.Activate 
    wb1.Worksheets(1).Range("A5").Select 
    ActiveSheet.Paste 

    DoEvents 

    myFile = Dir 
Loop 

    MsgBox "Task Complete!" 

ResetSettings: 

    Application.EnableEvents = True 
    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 

End Sub 

이 내가 결국 새롭게 문을 연 통합 문서의 여러 워크 시트에서 복사하는 일을 포함하는 수행하고 원래 매크로 실행 통합 문서의 여러 시트에 붙여 넣어 갈 거 야의 단순화 된 버전입니다. 그러나이 시점에서이 간단한 버전을 실행하고 작동 시키려고합니다. 긴 코드에 대한 귀하의 모든 도움과 사과에 감사드립니다.하지만 모든 사람들에게 제가하고있는 일에 대한 아이디어를주고 싶습니다. 감사!

답변

0

SelectActivate을 사용하고 매크로 레코더 용으로 Selection을 사용하는 코드 작성을 중지하십시오. 당신은 매크로 레코더가 아니므로, 그것보다 훨씬 좋은 코드를 작성할 수 있습니다.

너무 많은 일을하고 런타임에 바인딩 된 호출하면 인텔리없이 자동 완성, 아니 툴팁에서 어떤 도움도없이 맹목적으로 코드를 입력하는 의미 Object을 작업 당신을 트래핑된다

wb.Worksheets(1).Range("A5:H28").Select 

여기에 Range 개체가 필요합니다. 이제

Dim source As Range 
Set source = wb.Worksheets(1).Range("A5:H28") 

, 당신은 source.을 입력 인텔리는 당신을 도울 수 있습니다. 계속 시도해보십시오.

source.Copy[space] 

대상을 바로 지정할 수 있음을 알리는 툴팁에 유의하십시오.

그래서 다른 범위합니다

Dim destination As Range 
Set destination = wb1.Worksheets(1).Range("A5") 

을 멀리 복사!

source.Copy destination 

지금, 당신은 아마 ... 그 루프가 끝나기 전에

+0

좋아 감사 wb.Close를 호출해야합니다.나는 그것이 작동하도록하고 있다고 생각하지만, 내일 다시 그것을 다루는 것을 계획하고 있으므로 스레드를 확실히 열고 싶습니다. 또한이 작업을 복사하여 루프에 붙여 넣을 수는 있지만 기존 데이터 위에 쓰기/붙여 넣기를 수행하는 방법에 대한 아이디어는 없습니까? 기본적으로 모든 데이터는 하나의 테이블에 저장되고 하나는 다른 테이블 아래에 붙여 넣습니다. msofolderpicker에서 열려있는 일부 통합 문서에는 90 개의 항목이 있지만 일부 항목에는 50 개만있을 수 있습니다. 정확한 번호를 가질 방법이 없으므로이 의미에서 동적으로 유지해야합니다. –

관련 문제