2014-11-29 3 views
0

이 작은 매크로를 작성하여 배열에 저장된 여러 시트를 복사하고 새 통합 문서에 시트의 이름과 순서를 유지하는 값으로 붙여 넣으려고합니다. 나는 몇 가지 해결책을 찾았지만 내 상황과 정확히 일치하지는 않는다. 결과VBA 붙여 넣기 시트 배열에서 값으로 새 통합 문서

Sub tryit() 

Dim wo As Workbook, wn As Workbook 
Dim so As Worksheet, sn As Worksheet 
Dim MyArray As Variant 

MyArray = Array("ar1", "ar2", "ar3") 

Set wo = ActiveWorkbook 
Set wn = Workbooks.Add 

For Each so In wo.Worksheets(MyArray) 
     Set sn = wn.Worksheets.Add 
     sn.Name = so.Name 
     so.Cells.Copy 
     sn.[A1].PasteSpecial xlPasteValues 
     sn.[A1].PasteSpecial xlPasteFormats 
    Next so 

wn.SaveAs Filename:=ThisWorkbook.Path & "\" & "Report" 
wn.Close savechanges:=True 

End Sub 

문제 : 나는 매 1 2 3 배열에서 새 워크 시트를 추가 해요

  1. 어떻게 삭제하는 그들을 대신 교체?
  2. 추가 된 워크 시트의 순서가 반대로 바뀝니다 (ark3, ark2, ark1).

나는 Lbound 및 Ubound 기능을 사용하여 몇 가지 솔루션을 보았지만 루프와 결합하는 방법을 잘 모르겠습니다. 코드 클리너를 만들 것이라고 생각하십니까?

미리 감사드립니다.

답변

0

나는 이것이 당신의 문제를 해결한다고 생각합니다. 마지막 시트를 지우는 부분에 대해서는 잘 모르겠습니다. 어떻게 처리할지 알고 싶습니다.

Sub tryit() 

Dim wo As Workbook, wn As Workbook 
Dim so As Worksheet 
Dim MyArray As Variant 

MyArray = Array("ar1", "ar2", "ar3") 

Set wo = ActiveWorkbook 
Set wn = Workbooks.Add 
'copy all worksheets at once 
wo.Worksheets(MyArray).Copy before:=wn.Worksheets(1) 

For Each so In wn.Worksheets 
    'same effect as PasteSpecial>Values 
    so.UsedRange.Value = so.UsedRange.Value 
Next so 

Application.DisplayAlerts = False 
'delete last sheet, the default sheet in original workbook 
'if there was more than one, need to adjust 
wn.Worksheets(wn.Worksheets.Count).Delete 
Application.DisplayAlerts = True 
wn.SaveAs Filename:=ThisWorkbook.Path & "\" & "Report" 
wn.Close savechanges:=True 
End Sub 
+0

감사합니다. 그게 거의 모든 문제를 해결합니다. workbook.add 메서드에 xlWBATWorksheet를 추가하여 기본 워크 시트를 삭제하지 않아도됩니다. 마지막으로 한 가지 - 새 통합 문서의 모든 워크 시트에서 모든 셀을 선택하고 싶지만 각 루프마다 Cells.Selected를 추가하면 "ar1"에서만 작동합니다. 루프마다 다른 것이 필요합니까? – Timbo

+0

왜 모든 셀을 선택하겠습니까? 그것은 사용자를위한 것입니까? 그렇지 않으면 VBA를위한 것이므로 거의 확실한 방법이 있습니다. 그렇게해야만한다면'so'를'Activate '하고'so.Cells.Select'를해야합니다. –

관련 문제