2013-08-25 3 views

답변

8

Worksheet.Copy 방법은 새로운 통합 문서에 대한 참조를 반환하지 않는다. 다음과 같이 워크 시트 참조를 사용할 수 있습니다.

Dim wsCopy As Excel.Worksheet 'changed from wb to wsCopy 

아시겠지만 After 또는 Before 인수를 제공하지 않으면 새 통합 문서로 복사됩니다. 같은 통합 문서 내에서 복사가이 코드를 사용합니다 : 새 통합 문서에 시트를 복사하고,에 대한 참조를 유지하려면

Set wsCopy = wb.Worksheets("Overview") 
wsCopy.Copy After:= wb.Worksheets(1) 'or Before:= 

를, 다음이 단계에서 수행 할 필요가 :

Dim wbNew As Excel.Workbook 
Dim wsCopied As Excel.Worksheet 

Set wbNew = Workbooks.Add 
wsCopy.Copy before:=wbNew.Worksheets(1) 
Set wsCopied = wbNew.Worksheets(1) 

새 통합 문서에 대한 참조 만 유지해야하는 경우 마지막 줄 및 wsCopied의 변수 선언을 생략하면됩니다.

+0

OP가 새로운 통합 문서를 원한다고 생각합니다. 문제는 새 통합 문서에 대한 참조를 반환하는 것입니다. –

+0

@chrisneilsen 이것은 나에게 발생했지만 OP에서 완전히 명확하지 않았습니다. 나는 이것을 할 수있는 방법을 내 대답에 추가했습니다. –

+0

Worksheet.Copy는 'Set wbRef = wb.Sheets ("Overview")를 할 수 없기 때문에 새 통합 문서에 대한 참조를 반환하지 않습니다. chris는 새로운 통합 문서가 즉시 활성화된다는 사실을 이용합니다. –

6

이 당신이 중 하나를 사용해야하는 몇 가지 경우 중 하나입니다 Active* 개체

wb.Sheets("Overview").Copy 
Set wbCopy = ActiveWorkbook 
+3

흠 - +1하지만 확실히 나중에 코드가 시작되면 * 액티브 피하기 위해 노력하고있어 혼란스러워. @AndyG 접근 방식을 시도해 보겠습니다. – whytheq

+2

복사 한 직후에만 ActiveWorkbook이 필요합니다. 그때부터 변수를 사용하십시오. –

3

워크 시트 복사 방법이 통합 문서 개체가 아닌 부울 값을 반환하는 것으로 나타납니다. 통합 문서에 대한 참조를 설정하려면 다음을 사용할 수 있습니다.

Sub wbcopy() 

Dim wbcopy As Excel.Workbook 
Dim wbIndex As Excel.Workbook 
Dim sArray() As String 
Dim iIndex As Integer 
Dim bfound As Boolean 
Dim wb As Workbook 

Set wb = ThisWorkbook 

ReDim sArray(Workbooks.Count) 

'Find the names of all the current workbooks 
For Each wbIndex In Workbooks 
    sArray(iIndex) = wbIndex.FullName 
Next wbIndex 

'Copy the sheet to a new workbook 
wb.Sheets("Overview").Copy 

'Find the sheet with the new name 
For Each wbIndex In Workbooks 

    bfound = False 

    For iIndex = LBound(sArray) To UBound(sArray) 
     If wbIndex.FullName = sArray(iIndex) Then 
      bfound = True 
      Exit For 
     End If 
    Next iIndex 

    If Not bfound Then 
     Set wbcopy = wbIndex 
     Exit For 
    End If 

Next wbIndex 

End Sub 
+0

+1 그게 좋은데 - @AndyG의 대답은 더 작고 더 직접적이라고 믿습니다. 그러나 저는 여전히 이것을 좋아합니다. 감사. – whytheq

+0

이 솔루션은 통합 문서 이름을 저장하는 첫 번째 루프에서 iIndex 카운터를 증가시켜야합니다. 지금은 배열의 첫 번째 요소를 계속 덮어 씁니다. – Michael

-1

나는 오늘도 똑같이 달렸습니다. 내게는 활성 객체가 너무 막연하여 시트 객체를 안정적으로 결정하는 방법을 찾았습니다. 는 사람이 찾고 그냥 경우, 여기에 파일입니다 :

작업을

rn43x을 수행

dim sws, tws as worksheet 

set sws = thisworkbook.sheets("source") 
sws.copy before:=sws 
set tws = sws.previous 

관련 문제