Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Leere Worksheets löschen

Leere Worksheets löschen
11.12.2012 22:59:06
Richi
Aus einem aktiven Excelfile kopiere ich die sheets 2-6 in ein neues File Workbooks.Add jedoch hat das neue File immer Tabelle 1 bis Tabelle 3
Die sheets per Makro zu löschen mit ActiveWorkbook.Sheets(i).Delete geht zwar aber ist unschön. Deshalb wollte ich einfach alle leeren Sheets löschen.
Bis auf 1 leeres Sheet geht es gibt dann einen Laufzeitfehler '9' Index ausserhalb des gültigen Bereichs. Da komme ich jetzt nicht weiter, wo mache ich da einen Fehler?Hier mein code:
Sub KopiereSheets()
Dim i As Integer 'sheet Nummer
i = 2 'Startwert setzen
Workbooks.Add
For i = 2 To 6 'gilt für sheet 2-6
ThisWorkbook.Sheets(i).Copy before:=ActiveWorkbook.Sheets(i - 1)
Next i
i = 1 'i neu setzen
For i = 1 To ActiveWorkbook.Sheets.Count
If WorksheetFunction.CountA(Worksheets(i).Cells) = 0 Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
End If
Next i
'geht zwar aber eben..
'Application.DisplayAlerts = False
'ActiveWorkbook.Sheets(8).Delete
'ActiveWorkbook.Sheets(7).Delete
'ActiveWorkbook.Sheets(6).Delete
'Application.DisplayAlerts = True
End Sub
LG Richi

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leere Worksheets löschen
11.12.2012 23:52:20
Daniel
Hi
das Problem ist folgendes:
in einer For-Schleife wird der Endwert beim ersten Durchlauf festgelegt und ist dann fix !
dh wenn du am Anfang noch 6 Sheets hast und dann eines löschst, dann hast du nur noch 5 Sheets, trotzdem läuft die Schleife aber bis 6 weiter und dann versuchst du am schluss ein gar nicht existierendes Sheet anzusprechen (nämlich Sheet 6, obwohl nur noch 5 da sind.
ein weieres Problem bei deiner Methode:
du löschst bspw Blatt 4, die folgenden Blätter rutschen nach, dh. aus Blatt 5 wird jetzt Blatt 4 und aus Blatt 6 wird Blatt 5.
Dein Schleifenzähler wird aber von 4 auf 5 hochgezählt, du prüft beim nächten Umlauf das neue Blatt 5, welches das alte Blatt 6 war. Damit hast du das alte Blatt 5 übersprungen und gar nicht geprüft !
beide Probleme umgeht man, indem man die Schleife einfach rückwärts laufen lässt:
For i = ActiveWorkbook.Sheets.Count to 1 Step -1
If WorksheetFunction.CountA(Worksheets(i).Cells) = 0 Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
End If
Next i
Gruß Daniel

Anzeige
AW: Leere Worksheets löschen
12.12.2012 19:09:57
Richi
Hallo Daniel
danke für deine Beschreibung, die habe ich am morgen übersehen, habe mich schon abgefunden, dass es mit for einfach nicht geht. Aber Dank deiner guten Erklärung ist mir die FOR Schleife jetzt klar.
Liebe Grüsse
Richi

AW: Worksheets kopieren in neue Arbeitsmappe
12.12.2012 05:04:19
fcs
Hallo Richi,
du kannst die Tabellenblätter auch so kopieren, dass beim Kopieren eine neue Mappe erstellt wird, die keine Leertabellen enthält.
Gruß
Franz
Sub Copy_Tab2_bis_6_Var01()
'ThisWorkbook.Worksheets(Array(2, 3, 4, 5, 6)).Copy
ActiveWorkbook.Worksheets(Array(2, 3, 4, 5, 6)).Copy
End Sub
Sub Copy_Tab2_bis_6_Var02()
Dim wbAktiv As Workbook, wbNeu As Workbook, I As Integer
Set wbAktiv = ActiveWorkbook
'Set wbAktiv = ThisWorkbook
For I = 2 To 6
If wbNeu Is Nothing Then
wbAktiv.Sheets(I).Copy
Set wbNeu = ActiveWorkbook
Else
wbAktiv.Sheets(I).Copy after:=wbNeu.Sheets(wbNeu.Sheets.Count)
End If
Next
End Sub

Anzeige
AW: Worksheets kopieren in neue Arbeitsmappe
12.12.2012 06:26:25
Richi
Hallo Franz
danke für deine Hilfe, das funktioniert. Muss ich heute mal genau studieren.
liebe Grüsse
Richard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige