2014-09-20 6 views
4

여기 VBA 초보자, 내가하고있는 프로그램에 약간의 문제가 있습니다.여러 워크 시트를 통해 Excel VBA 루핑

첫 번째 워크 시트의 B 열의 마지막 셀에서 데이터를 복사하여 다른 워크 시트 xws의 A 열에 붙여넣고 데이터가있는 5 개의 다른 워크 시트에 대해이 작업을 반복해야합니다.

Sub exercise() 

    Dim ws As Worksheet 
    Dim rng As Range 
    'Finding last row in column B 
    Set rng = Range("B" & Rows.Count).End(xlUp) 

    For Each ws In ActiveWorkbook.Worksheets 
     'Don't copy data from xws worksheet 
     If ws.Name <> "xws" Then 
      'Storing first copied data in A1 
      If IsEmpty(Sheets("xws").[A1]) Then 
       rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp) 
      'Storing next copied data below previously filled cell 
      Else 
       rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) 
      End If 
     End If 
    Next ws 
End Sub 

WS에 문제가 있습니다 :

는 여기가 예상대로 작동하지 않는 코드입니다. 하지만, if 문이나 범위 (rng = ...로 설정)에서 rng 전에 넣을 때마다 오류가 발생합니다. 어떤 포인터에 미리

감사합니다.

+0

작동하지 않는 기능은 무엇입니까? – Cullub

+0

활성 워크 시트에서 매크로를 시작하면 동일한 정보가 활성 워크 시트에서만 workhet xws의 여섯 개의 셀 (A1 : A6)에 복사됩니다. – Timbo

답변

5

당신처럼, 루프 내부의 각 ws에 대한 rng를 선언해야합니다 코드가 지금

Sub exercise() 
    Dim ws As Worksheet 
    Dim rng As Range 

    For Each ws In ActiveWorkbook.Worksheets 
     'Finding last row in column B 
     Set rng = ws.Range("B" & ws.Rows.Count).End(xlUp) '<~~ Moved inside the loop 
     'Don't copy data from xws worksheet 
     If ws.Name <> "xws" Then 
      'Storing first copied data in A1 
      If IsEmpty(Sheets("xws").[A1]) Then 
       rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp) 
      'Storing next copied data below previously filled cell 
      Else 
       rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) 
      End If 
     End If 
    Next ws 
End Sub 

으로 rng이 매크로를 실행시 ActiveSheet를 가리키는되며, 코드 것 그런 다음 코드 반복마다 동일한 셀을 복사하십시오.

관련 문제