2017-03-10 1 views
-2

다음 코드 For 나는 한 통합 문서의 범위에서 데이터를 가져 와서 탭 이름을 기반으로 지정된 폴더에서 찾은 다른 통합 문서에 놓는 것이 좋습니다.탭 이름을 기반으로 파일을 엽니 다?

책상 위에있는 폴더에는 "Master, Processor Alex, Processor Sue, Processor Bill"이라는 파일이 4 개 있습니다. Master.xlsm에는 "Skip Me, Alex, Sue, Bill"의 네 개의 탭이 있습니다. Alex et al의 해당 탭에서 통합 문서 마지막 페이지로 전송 된 코드의 범위가 필요합니다.

불행하게도 나는 무릎 꿇기에 F8을 사용하여 단계를 수행 할 수 없기 때문에 어떤 종류의 프로젝트 사이드 바가 열립니다. 그게 나에게 오류를주고 나는 VBA에 익숙하지 않기 때문에 오류를 이해하지 못한다. 하지만이 프로젝트는 나에게 매우 중요합니다.

루프를 사용하여 작업 한 코드를 가져 와서 루프를 사용하여 다시 작성하고 아래받은 탭 이름에서 통합 문서 열기를 시도했습니다. 나는 여기에 어디에도 없었던 곳에 오류가 생겼다.

Sub SheetLoop() 

Dim ws As Worksheet 
Dim SourceWB As Workbook 
Set SourceWB = ThisWorkbook 
Application.ScreenUpdating = False 

For Each ws In Worksheets 
    If ws.Name <> "Skip Me" Then     
    ws.Activate 
    ws.Select 
    Range("A2:M10").Select 
    Selection.Copy 

    Workbooks.Open ("C:\Users\Scott\Desktop\VBA Proj\" & ws.Name & ".xlsx")'<---- -??? 

    Worksheets(Worksheets.Count).Select 'Selects last worksheet page 

    'Selects destination looking for first blank cell in "B" 
    Set ws = ActiveSheet 
    For Each Cel In ws.Columns(2).Cells 
     If IsEmpty(Cell) = True Then Cell.Select: Exit For 
    Next Cel ' corrected Cell > Cel 

    ActiveSheet.Paste    'Pastes selection  
    Application.CutCopyMode = False 'Clears Clipboard for next copy action 
    End If 
Next ws 

End Sub 
+2

당신은 '시트'컬렉션을 통해 루프 매우 간단한 서브 루틴으로 시작합니다. 그러면 Sheet.Name (즉, activeworkbook.Sheets (i) .name)이 제공됩니다. 그런 다음 해당 이름을 파일 이름 문자열의 일부로 만들고 통합 문서를 엽니 다. 코드를 사용하여 질문을 업데이트하려는 경우 다른 지침을 제공 할 수 있습니다. –

+0

다른 사람들을위한 코드를 작성하는 것에 대해 눈살을 찌푸리게합니다 - 그래서 사람들이 다른 사람들을위한 솔루션을 개발하는 사이트가 아닙니다. 특정 문제가 발생한 사람들 (즉, 코드 오류)을 돕는 것입니다. 나는 당신이 vba 코드를 포함하고있는 또 다른 질문을 올린 것을 본다. 그래서 간단한 서브 루틴은 당신이 시작할 곳이다. 모든 시트 이름을 줄 루프를 만들고 경로 및 파일 이름 (예 : MSgBox "C : \ ... \ xxx \"및 & ".xlsx")을 만든 코드 줄을 추가하십시오. 질문과 모두가 부 대 정리를 도와 드리겠습니다. :) –

답변

1

자신의 코드를 작성해야합니다. 고장난 부분을 해결할 수 있도록 도와 드리지만 여기에 코드를 작성하지 않았습니다. 책에서 장을 반복하는

간단한 코드는 다음과 같습니다, 새 통합 문서가 동일한 폴더에 WKB 및 WKS 가정, 시트 이름에서 통합 문서 경로를 생성하는 간단한 코드가 정의 된

dim wkb as excel.workbook 
dim wks as excel.worksheet 
set wkb = thisworkbook ' or activework or whatever 
for each wks in wkb.sheets ' iterate through the sheets 
    msgbox "Now on sheet " & wks.name 
next 
입니다

코드와 책, 그리고 WKS의 시트 이름으로, 열이 책의 이름입니다 : 당신이 알고있는 가정,

dim mypath as string, newname as string, extn as string 
extn = ".xlsx" ' or ".xls" or whatever 
mypath = wkb.path 
if not right(mypath,1) = "\" then mypath = mypath & "\" 
newname = mypath & wks.name & extn 

간단한 코드는 통합 문서를 열 이름입니다 :

dim wkbdata as excel.workbook 
set wkbdata = workbooks.open(newname) 
0

내가하고 싶은 일이 완전히 명확하지 않습니다. 하지만 여기에 파일을 열어주는 코드가 있습니다. 이 파일 이름을 사용하여 원하는대로 사용할 수 있습니다.

For i = 1 to ActiveWorkbook.Worksheets.Count 
    Workbooks.Open "C:\FilePath\" & Worksheets(i).Name & ".xlsx" 

Next i 

이 정보가 도움이되기를 바랍니다. 코드의 일부분을 게시하거나보다 자세하게 설명하면 여기 사람들이 더 잘 도와 줄 수 있습니다.

+0

좋은 생각. 그게 도움이 될 –

+0

시스템 못하게하지만 편집하는 방법을 발견했다. –

+0

스콧, 제발! 서로 다른 두 곳에서 의견을 추가하는 일에 뛰어 들고 있기 때문에 이야기하는 내용을 따라하기가 어렵습니다. 나는 너를 도우 려하지만, 너는 도울 필요가있다. 다음에 답하십시오 : (1) '나를 허락하지 않는 시스템'이란 무엇입니까? 너 뭐하려고? (2) "셀 문제가 발견되었습니다. 그 일을하지 않았습니까?" 그게 내가 지적한 코드에서 그 장소를 찾았습니까? 그렇다면 코드를 업데이트하지 않으시겠습니까? (3) 질문에 지금있는 텍스트로 새로운 질문을 열려고 했습니까? 이 게시물은 꽤 많이 죽었습니다. 지금 코드를 정리하겠습니다. –

0

나는 위의 코드에 정말 가까운 것을 포함하고 있습니다. 통합 문서에서 테스트 한 기본 루프를 사용하여 처음부터 시작하여 이전 버전의 요소를 삭제하기 시작했습니다. 그 때 그것은 부서졌다.

+0

위의 코드를 실행하면 각 시트에 대한 메시지 상자가 있다고 가정합니까? 그렇다면 다음 단계는 경로를 작성하고 파일을 여는 것입니다. 나는 이름으로 문자열을 만든 다음 그 문자열을 사용하여 Excel을 엽니 다. 따라서 Sepehr Moravej가 게시 한 것을 적용하거나 Winterknell이 게시 한 것을 적용하십시오. 루프 내부에 넣으십시오. 그리고 제안 ... 예약어 (즉, 현재)와 혼동 될 수있는 프로그래밍을 할 때 단어를 사용하지 마십시오 ... 나중에 머리를 긁적 거리지 않게 할 수 있습니다. –

+0

Workbooks.Open ("C : \ Users \ Scott \ Desktop \ VBA Proj \ Processor"& ws.Name & ".xlsx") 여러 stab로 인해 오류가 발생합니다. –

+0

코드에 표시 할 기회가 0 번 있습니다. 그래서 우리는 당신이 실제로 무엇을 실행하려고하는지 알지 못합니다. 'For Each Cel'은 'Next cell'과 일치하지 않습니다. 앞에서 말했듯이 전체 경로 및 이름을 사용하여 문자열을 작성하면 통합 문서를 열기 전에 쉽게 표시 할 수 있습니다. 그냥 'Debug.Print '또는 'MsgBox '을 사용하십시오. 오류가 발생한 곳에서 이전 메모에 열기를 게시 했습니까? 그렇지 않다면 오해의 소지가있는 사람들입니다. –

0

"시스템을 통과시키지 마십시오"라는 말은 거의 의미가 없으며 F8과 같은 VBA 단축키를 의미합니다. 다른 Windows 10 기능을 엽니 다.

나는 그것을 필요로하는 다른 사람들의 공헌으로 아래를 게시하고 있습니다. 작동합니다. Mr.Excel 포럼의 Tonyyy에게 감사드립니다. 나는 다음 섹션에서 일할 수 있도록 라인을 줄였습니다. 그래서 어딘가에 잘못된 " '"가있을 수 있습니다. 나는 그들을 모두 가지고 있다고 생각해.

Sub UpdatebyLoop_2() 
Application.ScreenUpdating = False 
Dim SourceWB As Workbook, destinationWB As Workbook 
Dim ws As Worksheet 


       'Data Transfer Section 
Set SourceWB = ThisWorkbook 
On Error GoTo errHandler 
For Each ws In SourceWB.Worksheets 
If ws.Name <> "Skip me" And ws.Name <> "Skip me also" Then 
    Set destinationWB = Workbooks.Open(SourceWB.Path & "\" & ws.Name & ".xlsx") 
    ws.Range("B6:AK30").Copy Destination:=destinationWB.Sheets (Sheets.Count). _ 
     Cells(destinationWB.Sheets(Sheets.Count).Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) 
      destinationWB.Close savechanges:=True 

    End If 
'Repeat on next worksheet 
Next ws 
With Application 
    .CutCopyMode = False 
    .ScreenUpdating = True 
End With 
Exit Sub 

errHandler: 
    'MsgBox "Error " & Err.Number & ": " & Err.Description & vbCrLf & vbCrLf & _ 
    "Sorry, it seems the worksheet name - " & ws.Name & " - does not match a workbook name." 
    Resume Next 

최종 하위

관련 문제