2014-02-11 20 views
9

Ich versuche eine private Subroutine zu implementieren, um der aktiven Arbeitsmappe ein Sheet hinzuzufügen (Sheet wird verwendet, so dass man xlForms hinzufügen kann) , xlWorksheet usw.).Excel 2007 VBA - Verwenden von Sheets.Add zum Erstellen eines Diagramms am Ende einer Arbeitsmappe

Aber ich habe ein bizarres Problem mit, wo neue Diagramme relativ zu den anderen Blättern in der Arbeitsmappe erstellt werden.

Ich beginne mit dem Löschen des Blattes mit dem gleichen Namen (falls vorhanden) und verwenden Sie dann den folgenden Code aus:

ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.count()), _ 
Type:=sheet_type).Name = sheet_name 

Wo sheet_type ist ein optionaler Parameter der Enumeration XlSheetType und sheet_name ist ein string .

Es ist für jeden verfügbaren Argument völlig in Ordnung funktioniert wie xlWorksheet, xlDialogSheet und sogar die xl4MacroSheet - aber aus irgendeinem Grund die xlChart 1-Position vor dem Ende schaffen wird, im Gegensatz zu der sie das letzte Blatt in der Arbeitsmappe zu machen .

So Proben I/O (mit nur 3 Blättern beginnend off):

> 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() richtig kehren 3 in den vorherigen Beispielen (weil ich nur mit Schichten 1, 2 und 3 zu starten), und so es sollte es hypothetisch nach dem 3. Blatt positionieren, tut es aber nicht. Der Versuch, Sheets.count() + 1 nur für den Test zu tun, gibt mir einen Array-Index außerhalb des Bereichs Laufzeitausnahme (was zu erwarten ist).

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

und ich noch aufzuwickeln immer das gleiche Ergebnis:

Ich habe auch nur den Basiscode von getestet.

Also im Grunde meine Frage ist das: mache ich hier etwas falsch? Gibt es einen bestimmten Grund, warum ein Diagramm am Ende des Arbeitsbuchs nicht hinzugefügt werden kann? Oder ist das vielleicht ein Problem/Bug in VB, das behoben werden muss?

Ich verwende Office 2007, also ist es alternativ ein Fehler, der in neueren Versionen behoben wurde?

Jede Eingabe würde helfen.

EDIT: Es ist erwähnenswert, dass After:=Sheets(Sheets.count()) die selbe Stelle wie After:=Sheets(Sheets.count() - 1) produziert, aber nur in dem Fall, dass Type:=xlChart

EDIT 2 Die noch interessanter ist. Wenn Sie ein Diagramm erstellen, legen Sie es als das letzte Blatt in der Arbeitsmappe, und verwenden Sie den folgenden Code:

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

Excel automatisch die Charts neu auszurichten, dass ein Arbeitsblatt letzte ist.

Zum Beispiel, wenn Sie haben:

Sheet 1 | Sheet 2 | Sheet 3 | Chart 1 

und den Code verwenden, werden Sie

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

Dies ist interessant, ich teste es mit meinem Excel 2010 und ich bekomme die gleiche Antwort. 'Before' scheint zu funktionieren. Auch das 'Nachher'-Blatt mit Ausnahme des letzten Blattes funktioniert. Ich werde weiter testen und sehen, was ich finden werde – L42

+0

Nun, ich bin froh, es ist nicht nur ich, aber ich hoffe wirklich, dass es eine Lösung gibt. Es scheint seltsam, dass dieses Problem nur auftritt, wenn es xlChart ist. – Bitwize

+3

Siehe hier: http://books.google.com/books?id=wlLlMuSwAcC&pg=PA85&lpg=PA85&dq=vba+add+chart+at+end+of+workbook&source=bl&ots=EmmLbQJoju&sig=DavNAdtOdgvpMSbsi21I0zzWQ0w&hl=de&sa=X&ei=J5n5UvSGONGiqwGilIGIDw&ved= 0CC8Q6AEwBDgK # v = eine Seite & q = vba% 20add% 20chart% 20at% 20end% 20von% 20workbook & f = falsch. Scheint ein bekanntes Problem zu sein, und dort gibt es eine vorgeschlagene Lösung. –

Antwort

3

Ok, ich bin nicht sicher, ob dies wird Ihnen helfen, aber ja, es hat das gleiche seltsame Verhalten hier, und konnte keinen "sauberen" Weg finden, um das Blatt zu halten, so war meine Lösung das:

+0

Das sieht so aus, als wäre es ein guter Workaround, könnte es sich lohnen, als Antwort akzeptiert zu werden. –