Problem mit selection.sort

Und schon wieder steh ich im Wald…

Ich versuche 4 spalten zu sortieren. Jeweils in 2 sheets. Sortiert wird dabei zuerst nach Spalte1 (Organisationseinheit) und danach nach spalte2 (Pers.Nr.). Wenn ich den code für das 2.Blatt auskommentiere funktioniert es für die erste. Wenn ich die erste auskommentiere für die 2… Aber NICHT zusammen !!! Es öffnet sich eine MsgBox von VBA mit der Sinnvollen Meldung „400“.

Hat da irgendjemand eine Idee??

Sub Sort()

With ActiveWorkbook

.Sheets(1).Columns("A:smiley:").Select
 Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") \_
 , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= \_
 False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 \_
 :=xlSortNormal

.Sheets(2).Columns("A:smiley:").Select
 Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") \_
 , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= \_
 False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 \_
 :=xlSortNormal
End With

Gruss,
cosPhi

Sub Sortieren()
 For i = 1 To 2
 With ActiveWorkbook.Sheets(i)
 .Activate
 .Columns("A:smiley:").Sort \_
 Key1:=Range("A1"), \_
 Order1:=xlAscending, \_
 Key2:=Range("B1"), \_
 Order2:=xlAscending, \_
 Header:=xlYes, \_
 MatchCase:=False, \_
 Orientation:=xlSortRows
 End With 'ActiveWorkbook.Sheets(i)
 Next i
End Sub 'Sortieren

Wenn Du beide Blätter identisch sortierst, dann kannst Du das auch in eine Schleife packen. Ansonsten eben wieder separat. Ich hab´s mal wegen der Übersicht gemacht.

Der Fehler „400“ wäre sehr sonderbar. 1004 ist wahrscheinlicher. Du musst nämlich, bevor Du Zellen selektierst, das entsprechende Blatt aktivieren. Sonst knallt´s. Also mal ein .Scheets(2).Activate in Deinen Code einbauen vor dem zweiten Block.

Das mit dem Selektieren würde ich mir aber komplett sparen und direkt auf den angegebenen Bereich zugreifen, wie ich es im Beispiel mache. Damit sollte auch das Activate entfallen können.

Achso, und wenn Standardwerte benutzt werden, diese rausschmeißen. Das betrifft hier zumindest das OrderCustom. Weg damit. Bei der Orientation kenne ich übrigens nur xlSortRows als Wert. Und die letzten beiden Teile gibt´s zumindest bei Excel2000 nicht. Sieht aber auch sehr nach Standardwert aus. Also weg damit.

Achso, und das xlGuess bei den Headern sollte man nicht verwenden. Wenn Du vorher weißt, ob Du eine Überschrift hast oder nicht, solltest Du das fest angeben. Das Beispiel oben geht davon aus, dass in Zeile 1 eine Überschrift steht. Dazu kann man auch die Hilfe konsultieren…

Kristian

OT Standardparameter
Hallo Kristian,

Achso, und wenn Standardwerte benutzt werden, diese
rausschmeißen. Das betrifft hier zumindest das OrderCustom.
Weg damit. Bei der Orientation kenne ich übrigens nur
xlSortRows als Wert. Und die letzten beiden Teile gibt´s
zumindest bei Excel2000 nicht. Sieht aber auch sehr nach
Standardwert aus. Also weg damit.

bei Standardparametern bin ich sehr sehr zwiegespalten, einerseits alles weg was Standard ist ist okay weil es den Code unnötig vergrößert, brauch da keine ellenlange Liste.
Andrerseits, ich kenne nicht sofort alle Standardwerte für viele Befehle und bei der Fehlersuche ist es sehr hilfreich wenn bei Befehlen alle Parameter angegeben sind.
Wenn ich z.B. irgendwo nach was suche und sehe im Code „xlpart“ dann weiß ich wie gesucht wird, wenn dieser Parameter nicht da steht weiß ich das nicht bzw. muß nachschauen was da die Standardeinstellung ist.

Insofern mache ich es so, bei der Programmentwicklung nehme ich alle Parameter mit, du kennst das sicher , mach mal was mit Diagrammen o.ä., da hast du kiloweise parameter/Einstellungen, wenn das Ding läuft, schmeiß ich das Unnötige raus.

Achso, und das xlGuess bei den Headern sollte man nicht
verwenden. Wenn Du vorher weißt, ob Du eine Überschrift hast
oder nicht, solltest Du das fest angeben. Das Beispiel oben
geht davon aus, dass in Zeile 1 eine Überschrift steht. Dazu
kann man auch die Hilfe konsultieren…

Stimm ich zu, xlGuess wäre ja genial wenn ich denen in Redmont trauen würde, ich nehm lieber Xlno oder xlyes, da bin ich auf der sicheren Seite :smile:
Gruß
Reinhard