2013-05-02 2 views
1

워크 시트를 복사하여 다른 시트 바로 뒤에 배치하고 싶습니다. 하지만 숨겨진 시트가있을 때 문제가 있습니다.Excel VBA WorkSheet.Copy Excel 2013 이후

Excel 2013을 사용하여 새 통합 문서를 엽니 다. "Sheet1"뒤에 시트 추가. 이름 바꾸기 "HiddenSheet2" "HiddenSheet2"뒤에 시트 추가.

Sub test() 
Dim ws1 AS Worksheet 
Set wst = Sheets("Sheet1") 
wst.Copy After:=Sheets(wst.Index) 
End Sub 

삽입 된 시트 뒤에 위치 얻을 : - "HiddenSheet1"- "Sheet3에" 다음

다음 실행이 VBA 코드 "HiddenSheet1을"숨길 새 시트 "Sheet3에" 그래서 내가 "Sheet1의는"이 이름 바꾸기 "HiddenSheet2"가 아니라 "Sheet1"뒤에. 복사 된 시트가 활성 시트가되는 것을 발견했습니다.

VBA Copy Sheet to End of Workbook (with Hidden Worksheets)

Get Handle on last worksheet copied by Worksheet.Copy

하지만 내 문제는 내가 특정 순서에 남아 시트를 필요로합니다.

감사

편집 :

Sub test() 
Dim ws1 AS Worksheet 
Set wst = Sheets("Sheet1") 
wst.Copy After:=Sheets(wst.Index) 
ThisWorkbook.ActiveSheet.Move After:=Sheets(wst.Index) 
End Sub 

이 중 하나 "Sheet1의"후 직접 새 시트를하지 않습니다.

+3

를 추가 할 수 있습니까? – glh

+0

@ 글래스 고 말했다. 워크 시트 변수로 이미'wst'가 있습니다. 그냥'After' 인수에 사용하십시오 :) –

+0

'wst.copy after : = wst'와'wst.copy after : = Sheets ("Sheet1")'은 같은 결과를냅니다. 내 새 시트가 숨겨진 시트 다음에 "Sheet1"바로 뒤에 있지 않음 – Jonathan

답변

3

기존 코드는 왜 후`wst.copy를 사용하지

Sub test() 
Dim ws1 AS Worksheet 
Set wst = Sheets("Sheet1") 
wst.Copy After:=Sheets(wst.Index) 
ThisWorkbook.ActiveSheet.Move After:=Sheets(wst.Index) 
If (ActiveSheet.Index - wst.Index - 1) <> 0 Then 
     Sheets(wst.Index + 1).Visible = True 
     ActiveSheet.Move After:=wst 
     Sheets(wst.Index + 2).Visible = False 
    End If 
End Sub 
+0

감사합니다. 나는 세미 해킹을 할 수도 있다고 생각했다. 그러나 단지 내가 미치지 않았 음을 확인하고 싶었습니다. I 조금 그것을 수 : '경우 (ActiveSheet.Index - wst.Index - 1) <> 0이어서 어둡게 bVisible 부울 bVisible = 시트로서 (wst.Index + 1) .Visible 시트 (WST. Index + 1) .Visible = True 활성 시트.다음으로 이동 : = wst 시트 (wst.Index + 2) .Visible = bVisible 끝내기 ' 문제가있는 유일한 시간은 숨겨진 시트를 말하는 것이 안전 할 수 있지만 Visibility를 바로 저장합니다. Excel에서 다른 반복을 위해 나를 던졌습니다. – Jonathan

+0

왜 코드를 올바르게 포맷하지 않았는지 잘 모르겠다. – Jonathan

+0

+1 좋은 것. 숨겨진 시트와 관련된 문제 *에 대해 몰랐습니다. – glh

0

다른 곳에서 지정하지 않는 한 index 속성은 0입니다. 시트 속성은 하나의 기준입니다.

  1. 색인에 1을 추가하십시오 (선호하지 않음).
  2. .name 속성을 참조하십시오.
  3. 당신이 가지고있는 시트 변수를 참조하십시오. Wst.copy after : = wst, best.
  4. 또는 숨겨진 시트를 새 시트 다음으로 이동하십시오. = wst` :
+1

그래도 가능한 경우 색인을 사용하지 마십시오. 문제. – Jonathan