2014-02-11 19 views
9

활성 통합 문서에 시트를 추가하기 위해 개인 서브 루틴을 구현하려고합니다. 시트를 사용하여 xlForms를 추가하도록 선택할 수 있습니다 , xlWorksheet 등).Excel 2007 VBA - Sheets.Add를 사용하여 통합 문서 끝에 차트 만들기

하지만 통합 문서의 다른 시트와 관련하여 새 차트가 생성되는 위치에 기괴한 문제가 있습니다.

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ 
Type:=sheet_type).Name = sheet_name 
sheet_type이 열거 XlSheetType의 선택적 매개 변수입니다

sheet_namestring입니다 :

나는 (존재하는 경우) 동일한 이름의 시트를 삭제하고 다음 코드를 사용하여 시작 .

그것은 가능한 모든 인수에 대해 완벽하게 잘 작동

같은 xlWorksheet, xlDialogSheet, 심지어 xl4MacroSheet로 -하지만 통합 문서의 그것에게 마지막 시트를 만드는 반대로, 끝나기 전에 xlChart 1 위를 만들 몇 가지 이유 .

> Create_Sheet "Test", sheet_type:=xlWorksheet 
Sheet 1 | Sheet 2 | Sheet 3 | Test 

> Create_Sheet "Test", sheet_type:=xlDialogSheet 
Sheet 1 | Sheet 2 | Sheet 3 | Test 

> Create_Sheet "Test", sheet_type:=xlChart 
Sheet 1 | Sheet 2 | Test | Sheet 3 

Sheets.count() 제대로 (I은 시트 1, 2로 시작하기 때문에, 3) 위의 예에서 3을 반환 등 :

그래서 I/O는 (단 3 장으로 떨어져 시작) 샘플 그것은 3 번째 시트 다음에 그것을 가정해야하지만, 그렇지 않습니다. 테스트를 위해 Sheets.count() + 1을 시도하면 (예상되는) 배열 첨자가 범위를 벗어나는 런타임 예외 만 제공합니다.

는 난 단지 기본 코드 테스트 한 :

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ 
Type:=xlChart).Name = "Test" 

을하고 난 여전히 같은 결과를 얻는 바람.

기본적으로 내 질문은 여기에 있습니다. 나는 여기서 뭔가 잘못하고있는 것입니까? 차트를 통합 문서 끝에 추가 할 수없는 이유는 무엇입니까? 아니면이 문제가 아마도 VB에서 수정해야 할 버그입니까?

나는 Office 2007을 사용하고 있습니다. 그렇지 않으면 최신 버전에서 수정 된 오류입니까?

모든 입력이 도움이됩니다.

편집 : 그것은하지만이 훨씬 더 재미있다 Type:=xlChart

편집 2 하는 경우, After:=Sheets(Sheets.count())After:=Sheets(Sheets.count() - 1)과 같은 위치를 생산하고 있음을 주목할 필요가있다. 당신은 하나 개의 차트를 작성하는 경우, 통합 문서의 마지막 시트로 배치하고 다음 코드를 사용 : 워크 시트가 마지막이되도록 Excel에서 자동으로 차트를 다시 방향을합니다

ActiveWorkbook.Charts.Add After:=Charts(1) 

합니다.예를 들어

에게, 당신이있는 경우 :

Sheet 1 | Sheet 2 | Sheet 3 | Chart 1 

및 코드를 사용, 당신은 내가이 당신을 도울 것입니다 확실하지 오전

Sheet 1 | Sheet 2 | Chart 1 | Chart 2 | Sheet 3 
+0

이것은 재미 있습니다, 나는 그것을 테스트합니다 내 Excel 2010과 나는 같은 반응을 얻고 있습니다. 'Before '가 효과가있는 것처럼 보인다. 또한 'After'를두면 마지막 시트를 제외한 모든 시트가 작동합니다. 나는 시험을 계속하고 내가 무엇을 찾을지를 볼 것입니다. – L42

+0

글쎄요, 그것은 나뿐이 아니기 때문에 기뻐요.하지만 실제로 해결책이 있기를 바랍니다. xlChart 일 때만이 문제가 발생한다는 것이 기괴한 것 같습니다. – Bitwize

+3

여기를 참고하십시오 : http://books.google.com/books?id=wlLQlMuSwAcC&pg=PA85&lpg=PA85&dq=vba+add+chart+at+end+of+workbook&source=bl&ots=EmmLbQJoju&sig=DavNAdtOdgvpMSbsi21I0zzWQ0w&hl=en&sa=X&ei=J5n5UvSGONGiqwGilIGIDw&ved= 0CC8Q6AEwBDgK # v = onepage & q = vba % 20add % 20chart % 20at % 20end % 20of % 20workwork & f = false. 알려진 문제로 보입니다. 거기에 제안 된 해결책이 있습니다. –

답변

3

좋아 얻을 것이다,하지만 네, 있습니다 여기에 같은 이상한 행동이 있었고 마지막으로 시트를 만드는 "깨끗한"방법을 찾을 수 없었습니다. 따라서 내 해결책은 다음과 같습니다.

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count()), _ 
Type:=xlChart).Name = sheet_name 
Sheets(sheet_name).Move After:=Sheets(Sheets.Count()) 
+0

이것은 좋은 해결 방법이 될 것으로 보이며 답변으로 받아 들일 가치가 있습니다. –