Listbox sortieren wie Spalte im Blatt
#11
Hallo Achim,

Du hast mich schon richtig verstanden. Ich glaube aber, dass wir jetzt an dem Punkt angelangt sind, dass eine Beispieldatei zielführender ist. Smile

Gruß Uwe
Top
#12
Nicht ganz einfach mit der Beispieldatei. Das ist ein Komplex aus 28MB.
Ich denke, dass eine Beispieldatei auch gar nichts an Erkenntnissen bringt.
Ich gebe daher nochmal die Ablauffolge an.

Nach Eingabe der Kriterien kommt der Spezialfilter.
Code:
Worksheets("Tools").Range("A1:DS10000").AdvancedFilter Action:=xlFilterCopy, _
   CriteriaRange:=Worksheets("Auswahl").Range("A1:DS2"), CopytoRange:=Worksheets("Auswahl").Range("A3"), Unique:=False

Anschließend ermittele ich die Anzahl der Datensätze für die Listbox
Code:
For n = 4 To Worksheets("Auswahl").Cells(Rows.Count, 26).End(xlUp).Row: Next n
n = Worksheets("Auswahl").Cells(Rows.Count, 26).End(xlUp).Row - 3  '-3, weil der Beginn erst ab Zeile 4 ist

Jetzt wird die gefilterte Auswahl sortiert durch Klick auf einen Optionbutton.
In diesem Code für den Optionbutton steht dann z.B.
Code:
 Sort_A = "A4"
 Sort_B = "E4"
 Sort_C = "Z4"
 Call Sortieren 'Modul 9

Nun kommt dein Code, der funktioniert.
Code:
With Worksheets("Auswahl")
 With .Range(.Cells(4, 1), .Cells(n + 3, 125))
   .Columns(1).NumberFormat = "@"
   .Columns(1).TextToColumns Destination:=.Cells(1, 1), _
     DataType:=xlFixedWidth, _
     FieldInfo:=Array(0, 2)
   ListBox1.RowSource = "Auswahl!" & .Address
 End With
End With

Modul9
Code:
Sub Sortieren()
   With Worksheets("Auswahl").Range("A4:DS10000")
       .Sort Key1:=.Range(Sort_A), Order1:=Richtung, Key2:=.Range(Sort_B) _
       , Order2:=xlAscending, Key3:=.Range(Sort_C), Order3:=xlAscending, Header:= _
       xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
       DataOption1:=xlSortTextAsNumbers, DataOption2:=xlSortNormal, DataOption3 _
       :=xlSortNormal
   End With
End Sub

So funktioniert es NICHT.
Erst, wenn ich den Aufruf CALL Sortieren rausnehme, dann macht DEIN Code exakt das, was ich haben will.
Eine Änderung von
DataOption1:=xlSortTextAsNumbers
in
DataOption1:=xlSortNormal
ändert nichts.
Top
#13
Hallo Achim,

das hatte ich vorhin ganz übersehen: Order1:=Richtung !?
Das weißt aber nur Du, was in der Benutzerdefinierten Liste Richtung hinterlegt ist. Wink
Nimm doch einfach mal Auf- oder Absteigend.

Gruß Uwe
Top
#14
Ich muss da mal bisschen was korrigieren.
In meinem Ausgangsblatt (Tools), dass der Spezialfilter durchläuft, sind die Daten in der richtigen Reihenfolge fest abgelegt.

Das bedeutet, dass deine Lösung wohl doch unwirksam ist.
Also im Blatt ("Tools") stehen die Daten so drin:
7032
7033
7047
7047_3D
7047_5D
7047_8D
7047_15D
7050
7060
7075
etc...

Und der Spezialfilter übergibt die gefilterten Zeilen in das Blatt "Auswahl".
Und jetzt erst werden die Zeilen mit meiner Sortierroutine in die falsche Reihenfolge gebracht.

Das Problem ist definitiv die Sortierung, bzw. die Sortieroutine.
Die Richtung wird bei mir über einen CommandButton gesteuert. Das Labels(xxx) ist eine Function,
die den Text in den CommandButton schreibt.
Und zwar so:
Code:
Sub Auf_Ab(myUF As UserForm)
With myUF
  If Richtung = 1 Then Richtung = 2: .CommandButton100.Caption = Labels(199): Call Sortieren: Exit Sub
  If Richtung = 2 Then Richtung = 1: .CommandButton100.Caption = Labels(200): Call Sortieren: Exit Sub
End With
End Sub
Ist ganz sicherlich etwas umständlich, aber mit einer BOOLEAN Variablen habe ich es nicht hinbekommen.
Geht ja so auch wunderbar.

Du erwähntest, dass das
DataOption1:=xlSortTextAsNumbers
das verursacht.
Aber wenn ich
DataOption1:=xlSortNormal
setze, ändert sich nichts.

Vielleicht ist die Standardsortierung von Excel nicht die richtige Wahl dafür.
Top
#15
Hallo Achim,

OK, dann ist das mit der Richtung auch klar.

Aber das Sortieren sollte erst nach meinem Code laufen!

Gruß Uwe
Top
#16
Habe ich dich richtig verstanden, dass nach jedem Sortieren des Blattes "Auswahl"
dein Code durchlaufen werden muss, damit das wieder passt?

Ich werde mal versuchen das so umzusetzen, wobei ich gestern mal
versuchte deinen Code in das Modul Sortierung hinter der Sortierroutine zu hängen.
Aber das hat (noch) nicht funktioniert.

Wäre aber meine einfachste Lösung, denn ich habe 12 UserFormen,
aus denen ich auf die Sortierung zugreife.

Na ich bastele mal und melde mich wieder.
Vorerst vielen Dank für deinen Code.

Vielleicht noch eins. Ich habe den Code NULL kapiert, was da eigentlich passiert.
Kannst du mir das etwas näher erklären?
Top
#17
(12.10.2015, 13:00)maine-coon schrieb: Habe ich dich richtig verstanden, dass nach jedem Sortieren des Blattes "Auswahl"
dein Code durchlaufen werden muss, damit das wieder passt?
Nein. genau anders herum!

(12.10.2015, 13:00)maine-coon schrieb: Vielleicht noch eins. Ich habe den Code NULL kapiert, was da eigentlich passiert.
Kannst du mir das etwas näher erklären?
Zuerst werden die Zellen mit dem Zellformat Text formatiert:
  .Columns(1).NumberFormat = "@"
Anschließend werden die Zellen mit dem Tool Text in Spalten (zu finden im Menü Daten) mit dem Format Text auf sich selbst zurückgeschrieben. Erst dadurch nimmt Excel alle Zellen wirklich als Text war.
  .Columns(1).TextToColumns Destination:=.Cells(1, 1), _
    DataType:=xlFixedWidth, _
    FieldInfo:=Array(0, 2)


Übrigens brauchst Du nur mal den Cursor auf TextToColumns stellen und F1 drücken. Wink

Gruß Uwe
Top
#18
Du zeigt immer wieder wie erwünscht das hochladen einer Beispieldatei wäre.
Top
#19
So,
nun habe ich deinen Code an die richtige Stelle platziert und
somit wird der jetzt auch in der richtigen Reihenfolge abgearbeitet.

Und nun funktioniert das.
Vielen Dank für die Lösung zu diesem Anliegen.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste