2017-12-19 1 views
1

안녕하세요 여러분, 특정 범위에서 이름이 지정된 특정 워크 시트 목록을 반복하여 요약 시트에 붙여 넣으려고합니다. 작업 선택된 시트가 다른 시트로 기준과 페이스트 값을 확인하기 위해 범위를 통해 진행되는 루프를 들어워크 시트 목록을 반복하여 붙여 넣기 데이터를 요약 시트에 복사하십시오.

Sub MacroToDoTheWork() 

Dim ws As Worksheet 
Dim ZeileUntersucht As Integer 
Dim ZeileEintragen As Integer 
Dim sheet_name As Range 


ZeileUntersucht = 17 
ZeileEintragen = 2 

For each sheet_name in Sheets("Frontend").Range("L21:L49") 

For ZeileUntersucht = 20 To 515 
    If ws.Cells(ZeileUntersucht, 238).Value = "yes" Then 
     Worksheets("Market Place Output").Cells(ZeileEintragen, 1) = ws.Cells(ZeileUntersucht, 1) 
     ZeileEintragen = ZeileEintragen + 1 

    End If 
Next ZeileUntersucht 

Next sheet_name 

End Sub 

:

은 지금까지 나는이 코드를 가지고있다. 내가 겪고있는 문제는 For each loop이다. 이 루프가 워크 시트 목록에 대해 작동하도록합니다. 프론트 엔드 범위 L21 : L49는 워크 시트 이름이 저장되는 범위입니다. 추가 정보가 필요하면,

답변

0

당신은 Rangesheet_names에 배열에서 모든 시트 이름을 읽을 수 있습니다.

나중에 모두 Sheets (ThisWorkbook)을 반복 할 때 루프의 현재 시트가 Match 기능을 사용하여 배열의 이름 중 하나와 일치하는지 확인할 수 있습니다.

: 당신이 당신의 Sheets("Frontend").Range("L21:L49")에 시트 이름을 통해 반복, 그것을 다른 방법을 다음 시트의 이름을 사용하려고하면 시트 이름 원, 당신은 런타임 오류를 얻을 수 있습니다 통합 문서의 모든 시트에서 찾을 수 있습니다. 내 문제는 더 명확하게 할 수 있는지 제안에 대한

수정 된 코드

Dim Sht As Worksheet 
Dim sheet_names As Variant 

' getting the sheet names inside an array 
sheet_names = Application.Transpose(Sheets("Frontend").Range("L21:L49").Value) 

' loop through worksheets 
For Each Sht In ThisWorkbook.Sheets 
    ' use Macth function to check if current sheet's name matches one of the sheets in your Range 
    If Not IsError(Application.Match(Sht.Name, sheet_names, 0)) Then 
     ' do here your copy Paste 


    End If 

Next Sht 
+0

제안 해 주셔서 감사합니다. immediatly 테스트 해 보겠습니다. – Tim

+0

@Tim 피드백? 의도 한대로 작동합니까? –

0

문의하시기 바랍니다

것은

나는 정확히 당신에게 문제를 이해하지 못했지만,이처럼하려고하면 나는 그것이 해결 될 것이라고 생각 : 당신의 생각은

For Each sheet_name In Sheets("Frontend").Range("L21:L49") 
    Set ws = Worksheets(sheet_name.Text) 
    For ZeileUntersucht = 20 To 515 
     If ws.Cells(ZeileUntersucht, 238).Value = "yes" Then 
      Worksheets("Market Place Output").Cells(ZeileEintragen, 1) = ws.Cells(ZeileUntersucht, 1) 
      ZeileEintragen = ZeileEintragen + 1 
     End If 
    Next ZeileUntersucht 
Next sheet_name 

경우 워크 시트의 이름이 sheet_name 인 경우 작업해야합니다.


두 아이디어 : VBA에서 변수 이름에 _를 사용

+0

감사합니다. 워크 시트 목록을 통해 반복하고 내 매크로에서 두 번째 For 루프를 수행하는 작동 루프를 만들 수 없습니다. 지금 당장 당신의 솔루션을 테스트 해 보겠습니다. – Tim

+1

유용한 팁 주셔서 감사합니다. 솔루션을 구현했는데 매크로가 실행되지만 잠시 후 "아래 첨자가 범위를 벗어났습니다."라는 오류 메시지가 표시되고 대량의 매크로로 인해 매크로를 실행하는 데 너무 오랜 시간이 걸립니다. 데이터를 확인해야합니다. 이 방법을 원활하게 진행할 수있는 방법이 있습니까? – Tim

+0

@Tim - https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba – Vityata

관련 문제