Ich werde leider im Netz nicht fündig und flippe bald aus. Ich vermute mal, dass das nicht möglich ist. Aber ich will mal euch Profis fragen.
In einer Listbox lese ich einen bestimmten Bereich ein. Mit Hilfe eines SpinButtons kann ich den Zellenbereich über selektierte Zeile der Listbox verschieben. Das funktioniert ganz gut. Wäre das Verschieben ohne den SpinButton möglich? Sondern direkt in der selektierten Zeile der Listbox, mithilfe der Maus?
Sollen Spalten auf/abwärts sortiert werden? So richtig verstehe ich dein Ansinnen noch nicht.
Man könnte nämlich mit etwas Aufwand, wenn es unbedingt eine Listbox sein muss, das mit Rechts-/Linksklick auf ein Label über der Spalte machen. Wobei aus diesem Blickwinkel einfach die Verwendung einer Listview der simplere Weg ist. Das geht dann mit ein paar wenigen zusätzlichen Programmzeilen.
17.12.2022, 11:10 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2022, 11:11 von Eizi100.)
HI Uwe Die Sache ist, dass die Userform bzw die Arbeitsmappe sehr komplex ist. Das ist nur ein Auszug. Mit der Userform werden noch viele andere Sachen geändert. Es wird dann ein bestimmter Bereich in die Hilfstabelle kopiert, bearbeitet sortiert und dann wieder zurückkopiert und dann als Mail versendet.
Es müsste bzw sollte die Ganze Zeile verschoben werden (auf oder Abwärts). Überschriften brauche ich nicht.
17.12.2022, 11:33 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2022, 11:36 von Eizi100.)
Danke Uwe Für dich ist das kein Problem. Für mich aber ein gewaltiges Ich brauche für so Kleinigkeiten tlw, Tage, Darum bewundere ich euch, wie ihr das jedesmal hinbekommt Ich habe mir meine bescheidenen Kenntnisse mithilfe der Foren angeeignet.
Ich bekomme das verschieben der Zelle nur mit den Buttons zusammen. Das klappt ja auch. Ich will die Zeile aber direkt mit der Maus, ohne Spinbutton, in der Listbox verschieben Eventuel mit MouseDown und MouseUp Ereignis LG Michael
hier mal ein "absichtliches Mißverstehen". Mit diesem Code könntest Du die Spinbutton-Funktion mit der Maus ersetzen. Allerdings nicht ganz, weil die Markierung immer unter der Maus bleibt. Wenn Du einen Eintrag 3 Zeilen hochrücken willst, musst Du immer mit der Maus nachrücken und dann nochmal drücken. Bleibst Du mit der Maus auf einer Stelle, werden zwei Einträge immer nur getauscht.
Ich habe dazu mal Deinen bisherigen Code genutzt.
Ich denke aber, Du willst in der Listbox eine "Zeile" mit der Maus festhalten und die dann ein paar Zeilen hoch oder runter schieben, ohne x mal zu drücken.
Code:
Private Sub Listbox_Test_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim Kopie, alt As Integer, neu As Integer, i As Integer Dim sTmp As String, ii As Integer If Button = 1 Then With Listbox_Test alt = .ListIndex If alt <> -1 Then neu = IIf(alt = .ListCount - 1, 0, alt + 1) Kopie = .List For i = 0 To .ColumnCount - 1 .List(neu, i) = Kopie(alt, i) .List(alt, i) = Kopie(neu, i) If .ListIndex <> .ListCount - 1 Then .ListIndex = alt + 1 Worksheets("Hilfstabelle").Range("A2:H11") = .List Next i End If End With End If If Button = 2 Then i = Listbox_Test.ListIndex If Listbox_Test.ListIndex = 0 Then Exit Sub End If With Listbox_Test alt = .ListIndex If alt <> -1 Then neu = IIf(alt = 0, .ListCount - 1, alt - 1) Kopie = .List For i = 0 To .ColumnCount - 1 .List(neu, i) = Kopie(alt, i) .List(alt, i) = Kopie(neu, i) .ListIndex = alt - 1 Worksheets("Hilfstabelle").Range("A2:H11") = .List Next i End If End With End If End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
ich gebe auch mal meinen Dreier mit dazu. Ebenfalls unter Nutzung der vorhandenen Codes. In meinem Fall mit der rechten Maustaste eine nach unten und mit der rechten Maustaste + Shift eine nach oben.
Hallo zusammen Ich möchte mich bei euch bedanken. Echt super. Ich frage mich immer wieder, wie ihr sowas zusammenbringt Ich dachte echt, dass das einfacher geht (Einfach das ChangeEreignis umstellen>>> Schäm) Das hätte ich niemals zusammen gebracht. Ich wüsche euch allen noch schöne Feiertage
Private Sub UserForm_Initialize() Listbox_Test.List = Sheets("Hilfstabelle").Cells(1, 2).CurrentRegion.Value End Sub
Private Sub Listbox_Test_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal y As Single) If Button = 2 Then M_move Shift End Sub
Private Sub M_move(y) If y = 0 And Listbox_Test.ListIndex = Listbox_Test.ListCount - 1 Then Exit Sub If y = 1 And Listbox_Test.ListIndex < 2 Then Exit Sub
With Listbox_Test y = .ListIndex + 1 + 2 * (y = 1) sn = Application.Index(.List, .ListIndex + 1) .List(.ListIndex, 0) = .List(y, 0) .List(.ListIndex, 1) = .List(y, 1) .List(y, 0) = sn(1) .List(y, 1) = sn(2) .ListIndex = y End With End Sub