Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Frage zur Sortierung einer Liste
#11
Ich habe mir mal alle eure Vorschläge genauer betrachtet.
Diese Listbox Überschriften Klick Version ist ja genial.

Die Sache hat nur einen Haken.
Ich habe nichts, aber auch wirklich gar nichts davon verstanden,
was da innerhalb des innerhalb des Listbox1_MouseDown Ereignisses steht.

Ich werde mal versuchen die CB zu gruppieren....
Danke euch sehr für die Vorschläge....
Top
#12
Hallo Achim,

wenn Du genau beschreibst, wie bei Click auf die einzelnen
Überschriften sortiert werden soll, dann kann ich Dir das Ganze
auf Deine Bedürfnisse anpassen.

Die Funktionsweise kann ich Dir heute Abend erklären.
Gestern fehlte mir die Zeit dazu. Wie gesagt, es ist recht einfach
und mit ein wenig Hilfestellung bekommst Du es sicher hin.
Gruß Atilla
Top
#13
Code:
ListBox1.ColumnWidths = "40;0;0;44;0;60;35;20;60;40;0;0;0;0;0;0;0;0;0;0;0;0;42;130;170;0;0;0;0;0;0;0;50;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"

Sort_A = "W4" 'Startsortierung beim Öffnen der UF
Sort_B = "A4"
Sort_C = "BQ4"

Sort_A = "A4" 'Bei Klick auf OB für ØD1
Sort_B = "D4"
Sort_C = "W4"
Call Sortieren

Sort_A = "D4" 'Bei Klick auf OB für NL
Sort_B = "A4"
Sort_C = "W4"
Call Sortieren

Sort_A = "W4" 'Bei Klick auf OB für Typ
Sort_B = "A4"
Sort_C = "A4"
Call Sortieren
Habe jetzt nicht die ganze Sub der einzelnen OB rausgezogen.
Das wären 4 OptionButton für 4 Sortierungen in den jeweiligen Spalten.

In einem anderen Bereich sieht das genau so aus, nur das andere Spalten in der Listbox zu sehen sind.
Reicht dir das aus als Info?
Top
#14
Es lässt mir keine Ruhe, was dieses Listbox_MouseDown Ereignis betrifft.

Ich habe jetzt mal dieses Listbox1_MouseDown Ereignis in meine Userform1 eingesetzt und einfach mal laufen lassen.
Nicht zu fassen. Das funktioniert ohne Fehler.

Aber ich kann die Zahlen im Ereignis nicht interpretieren.

Das geht schon mit den Variablen x und y los.
y < 15...Für was steht die 15?
Case 1 To 76, 5.... 76? 5?

Wenn ich jetzt noch wüßte wie ich die Zahlen ändern muss, damit die richtigen Spalten angesprochen werden,
dann müsste es klappen....
Top
#15
Hallo Achim,

(16.08.2014, 14:24)maine-coon schrieb: Das geht schon mit den Variablen x und y los.
y < 15...Für was steht die 15?
Case 1 To 76, 5.... 76? 5?

Wenn ich jetzt noch wüßte wie ich die Zahlen ändern muss, damit die richtigen Spalten angesprochen werden,
dann müsste es klappen....

Mal aus der Hilfe rauskopiert
Zitat:X, Y Erforderlich. Die horizontale oder vertikale Position in Punkten vom linken oder oberen Rand des Formulars, Rahmen-Steuerelements (Frame) oder Page-Objekts.

Bei y: von wie weit oben von der Listbox soll der Mausklick ausgewertet.
Bei x: Du hast doch hier

Zitat:ListBox1.ColumnWidths = "40;0;0;44;0;60;35;20;60;40;0;0;0;0;0;0;0;0;0;0;0;0;42;130;170;0;0;0;0;0;0;0;50;0​;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0​;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0​;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0​;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0"

deine Spaltenbreite von der Listbox angegeben. Wenn Du jetzt die einzelnen Spalten addierst, sollte Du auf die passenden Werte kommen.
Gruß Stefan
Win 10 / Office 2016
Top
#16
In der Beispieldatei hat die Listbox ein
Height = 102,8
Widht = 229,5

Die Breite der Spalten ColumnWidhts wird nicht angegeben.

Was also ist hier die 15 für Y, und was ist die 76 für X?
76 auf 3 Spalten...hmmm 25,33....
Select Case 76, 5 ...Komma 5...Für 5 Spalten?... Sind bloß 3 da....

Sorry, aber ich verstehe hier wirklich nur Bahnhof....Huh
Top
#17
Hallo Achim,

Stefan hat Dir ja schon entscheidende Erklärungen gegeben, von mir noch Code mit Kommentaren,
in welchem Beispielhaft die ersten drei Spalten Deiner Listbox nachgestellt sind.

Code:
Private Sub Listbox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Y < 15 Then    'die Überschrift hat die Höhe von 14 Punkten (wenn auf der Position zwischen 0 und 15 Punkten in der Verticalen (Y) in die Listbox geklickt
   Richtung = IIf(Richtung = 1, 2, 1)     ' wenn Richtung 1 dann 2, sonst eins (beim ersten Aufruf ist Richtung = 0, deshalb wird erst nach dem 2, Click erst sortiert, ab da immer ein Click solange Userform geladen)
   Select Case X     ' (X gibt die Horizontale Position an)
      Case 1 To 40   'bis zur Breite ersten Spalte
         Sort_A = "A4" 'Bei Klick auf OB für ØD1
         Sort_B = "D4"
         Sort_C = "W4"
         Call Sortieren
      Case 41 To 84  'ab Ende 1. Spalte + breite der zweiten sictbaren Spalte
         Sort_A = "D4" 'Bei Klick auf OB für NL
         Sort_B = "A4"
         Sort_C = "W4"
      Case 85 To 144      'Summe Spaltenbreite 1 + 2 + nächste sichtbare Spaltenbreite
         Sort_A = "W4" 'Bei Klick auf OB für Typ
         Sort_B = "A4"
         Sort_C = "A4"
   End Select
End If

End Sub


Mit den Kommentaren im Code solltest Du das Prinzip verstehen können, sonst frag noch einmal nach.

Noch eins zur Höhe der Überschrift: Das kannst Du entweder durch Näherungswerte herausfinden oder Du nimmst das Private Sub Listbox1_MouseDown bevor Code drin ist und lässt Dir Höhe nach Click von einer MsgBox anzeigen.

So z.B:

Code:
Private Sub Listbox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   MsgBox Y
End Sub
Gruß Atilla
Top
#18
Okay, jetzt habe ich es verstanden.
Die Zahlen entsprechen so eine Art "Rahmen" wie bei einem Touchscreen.
Innerhalb eines bestimmten Bereichs funktioniert dieser "Pseudo-Hyperlink" und löst das Ereignis aus.

Eine gute Idee, aber leider doch nicht für mich zu gebrauchen.
Denn meine UF und natürlich auch die darin befindliche Listbox wird vom User auf seinen Screen angepasst.
Das würde bedeuten, ich müsste die festgelegten Funktionsrahmen dynamisch an den screen anpassen.

Ein gigantischer Aufwand, den ich nicht machen möchte.
Ich will mal versuchen meine 6 OB im Rahmen rauszunehmen, dafür 6 CB einzubauen und als Gruppe definieren.

Ich danke euch vielmals für die Bemühungen und bitte um Entschuldigung,
dass ich nicht erwähnt hatte,
dass meine immer auf Screen-Max stehende UF vom User an seinen Screen angepasst wird.
Top
#19
Hallo Achim,

aber die Spalten in der Listbox werden doch nicht breiter oder schmäler oder sehe ich das falsch?
Gruß Stefan
Win 10 / Office 2016
Top
#20
Nein, die ändern sich nicht; ebenso wie meine Werte in der Sub.
Und es ist doch bestimmt ein Unterschied, ob ich mit 2560x1920, oder 1024x768 arbeite?

Die UF ist immer auf Screen Max und der User kann mit Hilfe von 2 CommandButton das anpassen.
Und zwar so:
Code:
Sub CommandButton6_Click() ' UF Kleiner
    If UserForm2.Zoom >= 70 Then
        With UserForm2
            .Zoom = .Zoom - ZF
            .Height = .Height - 0
            .Width = .Width - 3
            Label16.Caption = "<<<  " & .Zoom & "%  >>>"
            UFZ = .Zoom
        End With
        Workbooks(strTF).Sheets("Listen").Range("A25") = UFZ
    Else
    UserForm10.CommandButton7.SetFocus
    End If
End Sub


Private Sub CommandButton7_Click() 'UF Grösser
      If UserForm2.Zoom <= 200 Then
        With UserForm2
            .Zoom = .Zoom + ZF
            .Height = .Height + 0
            .Width = .Width + 3
             Label16.Caption = "<<<  " & .Zoom & "%  >>>"
            UFZ = .Zoom
        End With
        Workbooks(strTF).Sheets("Listen").Range("A25") = UFZ
    Else
        UserForm10.CommandButton6.SetFocus
    End If
End Sub
Top


Gehe zu:


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