Microsoft Excel

Herbers Excel/VBA-Archiv

"Move"-Problem: Then .Sheets(x).Move .Sheets(i) | Herbers Excel-Forum


Betrifft: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Peter
Geschrieben am: 07.08.2012 08:48:31

Guten Tag

Nachfolgender Code wird aus einer anderen Arbeitsmappe angestossen, während die Arbeitsmappe, in welcher die Tabellenblätter sortiert werden sollen, ausgeblendet sind.

Es läuft alles schön durch bis
If x > i Then .Sheets(x).Move .Sheets(i)
Auf dieser Zeile erhalte ich den Laufzeitfehler '1004': Die Move-Methode des Worksheet-Objektes konnte nicht ausgeführt werden (manchmal läuft aber auch alles durch; ich habe nicht herausgefunden, was dann anders ist).

Ich habe mir schon überlegt, ob es damit zu tun hat, dass die Arbeitsmappe (nicht nur ein Sheet), in welcher die Tabellen sortiert werden sollen ausgeblendet ist. Doch dann würde es wohl immer nicht funktionieren.

Wer kann mir helfen?

Gruss, Peter

Sub Tabellenblaetter_sortieren()
Dim i As Long, x As Long, AnzahlRegister As Long, Zaehler As Long, WkbThis As Excel.Workbook
Dim WshCockpit As Worksheet, WshISIN As Worksheet, WshIndex As Worksheet
Set WkbThis = ThisWorkbook
Set WshCockpit = WkbThis.Worksheets("Cockpit")
Set WshISIN = WkbThis.Worksheets("Stammdaten")
Application.ScreenUpdating = False
With WkbThis
.Activate
AnzahlRegister = .Sheets.Count
For i = 1 To AnzahlRegister - 1
x = i
For Zaehler = i + 1 To AnzahlRegister
If UCase$(.Sheets(Zaehler).Name) < UCase$(.Sheets(x).Name) Then
x = Zaehler
End If
Next Zaehler
If x > i Then .Sheets(x).Move .Sheets(i)
Next i
WshCockpit.Move before:=.Sheets(1)
WshISIN.Move after:=WshCockpit ''Funktioniert auch, wenn Sheet "Stammdaten" ausgeblendet ist
End With
Application.ScreenUpdating = True
End Sub

  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Matze,Matthias
Geschrieben am: 07.08.2012 09:04:49

Hallo peter,
If x > i Then .Sheets(x).Move .Sheets(i) Stell dir mal die Frage wohin ?
Matze


  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Peter
Geschrieben am: 07.08.2012 09:22:39

Hallo Matze
Vielen Dank für den Hinweis.
1.
Interessant ist, dass sich diese Frage bei eingeblendeter Arbeitsmappe anscheinend nicht stellt, da wird schön sortiert.

2.
If x > i Then .Sheets(x).Move before:=.Sheets(i) - mit dieser Anweisung erhalte ich den gleichen Fehler. Könntest du mir noch einen weiteren Hinweis geben, was ich ändern muss?

Danke und Gruss, Peter


  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Beverly
Geschrieben am: 07.08.2012 10:24:48

Hi Peter,

weshalb musst du so kompliziert sortieren, wenn nur 2 definierte Tabellenblätter an 2 definierte Positionen verschoben werden sollen?


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Peter
Geschrieben am: 07.08.2012 10:29:37

Hallo Karin
Es ist nicht ganz so.
Ich habe ca. 60 Tabellenblätter, die alphabetisch zu sortieren sind. Anschliessend sollen die Tabellen "Cockpit" an die erste Stelle und "Stammdaten" an die zweite Stelle verschoben werden.
Gruss, Peter


  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Matze,Matthias
Geschrieben am: 07.08.2012 11:17:54

Hallo Peter,

Option Explicit 'nicht vergessen

Sub Matze()
    Dim i As Long
    Dim x As Long
    Dim AnzahlRegister As Long
    Dim Zaehler As Long
    Application.ScreenUpdating = False
    With Workbook("Der Name der Datei.Endung")
    AnzahlRegister = .Sheets.Count
    For i = 1 To AnzahlRegister - 1
    x = i
    For Zaehler = i + 1 To AnzahlRegister
    If UCase$(.Sheets(Zaehler).Name) < UCase$(.Sheets(x).Name) Then
    x = Zaehler
    End If
    Next Zaehler
    If x > i Then .Sheets(x).Move .Sheets(i)
    Next i
    Sheets("Cockpit").Move before:=.Sheets(1)
    Sheets("Stammdaten").Move after:=.Sheets(1)
    End With
    Application.ScreenUpdating = True
    End Sub
Versuch mal Matze


  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Peter
Geschrieben am: 07.08.2012 12:31:24

Hallo Matze, hallo Karin

Vielen Dank für die Unterstützung.

ich habe viel ausprobiert und bin zum Schluss gekommen, dass die Sortierroutinen funktionieren, wenn die der Workbook eingeblendet ist. Wenn er ausgeblendet ist und eine weitere Excel-DAtei offen ist, habe ich es nicht geschafft. Ich habe mir jetzt wie folgt beholfen:
Nach dem Aufstarten der Datei abfragen, ob diese ausgeblendet ist
wenn ja, vor der Sortierung einblenden und anschliessend wieder ausblenden
ansonsten kann normal sortiert werden.

Gruss, Peter


  

Betrifft: AW: "Move"-Problem: Then .Sheets(x).Move .Sheets(i) von: Beverly
Geschrieben am: 07.08.2012 11:30:21

Hi Peter,

schau dir mal dieses Beispiel an: http://hajo-excel.de/chCounter3/getfile.php?id=63 - vielleicht hilft es dir ja beim Sortieren generell weiter.


GrußformelBeverly's Excel - Inn