Microsoft Excel

Herbers Excel/VBA-Archiv

Laufzeitfehler 9 bei Tabellenblatt Index


Betrifft: Laufzeitfehler 9 bei Tabellenblatt Index von: Tobias
Geschrieben am: 27.04.2017 16:13:26

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

  

Betrifft: AW: Laufzeitfehler 9 bei Tabellenblatt Index von: Daniel
Geschrieben am: 27.04.2017 16:21:57

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


  

Betrifft: AW: Laufzeitfehler 9 bei Tabellenblatt Index von: Tobias
Geschrieben am: 28.04.2017 08:51:45

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


Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler 9 bei Tabellenblatt Index"