Anzeige
Archiv - Navigation
1552to1556
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

Laufzeitfehler 9 bei Tabellenblatt Index

Laufzeitfehler 9 bei Tabellenblatt Index
27.04.2017 16:13:26
Tobias
Hallo,
ich möchte gerade mittels VBA Tabellenblätter aus einer Mappe in eine andere verschieben. Das Makro funktioniert beim ersten Schleifendurchlauf, doch dann bricht es mit der Fehlermeldung "Laufzeitfehler '9': Index außerhalb des gültigen Bereichs" ab. Ich bin nicht sicher wie die Indizes vergeben werden, bin aber davon ausgegangen, dass die Tabellenblätter von 1 bis zum letzten Tabellenblatt durchnummeriert sind. Liegt hier meine Fehlannahme?
Sub Übertragen()
Dim i As Integer, j As Integer, x As Integer
Workbooks.Add
ActiveWorkbook.SaveAs "C:\Users\Tobias\Desktop\neu.xls"
Workbooks("alt").Sheets(1).Activate
i = Sheets("00000").Index
j = 1
For x = 1 To ActiveWorkbook.Sheets.Count
If Sheets(x).Index > i Or Sheets(x).Index = i Then
Sheets(x).Move After:=Workbooks("neu").Sheets(j)
j = j + 1
End If
Next
Workbooks("Varipack").Sheets(1).Delete
End Sub

Der Fehler wird mir vom Debugger in der fett markierten Zeile angezeigt.
Das Makro soll alle Blätter ab dem Tabellenblatt "00000" verschieben. Leider verschiebt es nur eben dieses und produziert dann den genannten Fehler. Ich habe gerade echt ein Brett vorm Kopf und finde trotz viel Grübeln meinen Fehler in der Logik nicht.
Vielen Dank fürs Helfen
Grüße

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 9 bei Tabellenblatt Index
27.04.2017 16:21:57
Daniel
HI
ist schon richtig.
das Problem ist, dass sich Indexnummer sofort ändert, wenn du ein Blatt löschst oder woanders hin verschiebst.
dh wenn du das Blatt mit Index 3 in die andere Datei verschiebst, bekommt das Blatt, das bisher den index 4 hatte, den Index 3 (und auch alle folgenden rutschen nach)
von alldem bekommt deine Schleife aber nichts mit.
dh es werden blätter übersprungen (der Schleifenzähler springt von 3 auf 4, aber das alte Blatt 4 hat jetzt den Index 3 und wird daher nicht bearbeitet) und am Schluss versuchst du Blätter anzusprechen die es nicht mehr gibt.
Wenn man solche Dinge mit seinen Blättern vorhat, solle die Schleife imme rückwärts laufen:
For x  = Sheets.Count to 1 Step - 1
dann läuft die Schleife nur über Bereiche, die durch die Löschungen und Verschiebungen nicht verändert werden.
gruß Daniel
Anzeige
AW: Laufzeitfehler 9 bei Tabellenblatt Index
28.04.2017 08:51:45
Tobias
Vielen Dank. Das war auf jeden Fall ein Logikfehler in meinem Makro. Der eigentliche Fehler wurde damit nicht behoben. Dank, deiner Ausführungen, konnte ich diesen aber identifizieren. Die Fehler war, dass nach jedem Verschieben die Zielmappe auf aktiv gesetzt wird. Dann läuft der Index anfangs auf jeden Fall aus dem gültigen Bereich. Ich muss also bei jedem Schleifendurchgang die alte Mappe aktivieren.
Sub Übertragen()
Dim i As Integer, x As Integer, y As Integer
Application.ScreenUpdating = False
Workbooks.Add
ActiveWorkbook.SaveAs "C:\Users\Tobias\Desktop\neu.xls"
Workbooks("alt").Sheets(1).Activate
i = Sheets("00000").Index
j = 1
y = ActiveWorkbook.Sheets.Count
For x = y To i Step -1
Workbooks("alt").Activate
Sheets(x).Move Before:=Workbooks("neu").Sheets(1)
Next
i = Workbooks("neu").Sheets.Count
Application.DisplayAlerts = False
Workbooks("neu").Sheets(i).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Jetzt funktioniert es, ist leider nur etwas ressourcenlastig.
Grüße
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige