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
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
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
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. –