Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1060to1064
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ListBox sortieren

ListBox sortieren
18.03.2009 13:42:02
wonne69
Hallo zusammen...
Ich suche eine Möglichkeit die Zeilen, die in einer ungebundenen ListBox stehen, durch klicken auf bestimmte ColumnHeads zu sortieren, nachdem die Listbox gefüllt wurde.
Da die ListBox aus mehreren Spalten eines Worksheets gefüllt wird, steht der Inhalt nur sortiert nach Spalte A (Lfd. Nummer) drin.
Die Sortierung soll durch klicken in den ColumnHeads entweder nach Datum oder lexikographisch erfolgen.
Ist das überhaupt möglich?

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox sortieren
18.03.2009 14:21:29
Jochen
Hi,
ja, das geht, wie, findest du im Archiv.
mfg Lothar
AW: ListBox sortieren
18.03.2009 14:48:08
wonne69
Danke für die schnelle Antwort.
Hättest du vielleicht den Link dazu dan brauche ich nicht soooooo lange suchen.
AW: ListBox sortieren
18.03.2009 14:39:18
Tino
Hallo,
schau dich mal nach Quicksort um, damit kannst Du eine Area Sortieren.
Noch eine Möglichkeit wäre wenn es sich um Text handelt (keine Zahlen),
verwende dass ListView Steuerelement, da kannst mit klick auf die Spalte nach dieser sortieren.
Gruß Tino
AW: ListBox sortieren
18.03.2009 15:09:30
Gerd
Hi,
nicht Standardcontrols machen häufig bei Weitergabe der Datei Probleme, also
kein so toller Tipp.
mfg Gerd
AW: ListBox sortieren
18.03.2009 15:29:27
Nepumuk
Hallo Gerd,
das ListView-Control ist Windows-Standard und auf jedem Rechner der mit Windows betrieben wird verfügbar.
Gruß
Nepumuk
Anzeige
AW: ListBox sortieren
18.03.2009 15:45:38
wonne69
Danke, Danke, Danke für die Antworten...
Ich denke ich versuche die Lösung von Tino, dass sieht echt prima aus.
@Nepumuk, Frage zu Listview
18.03.2009 15:57:41
Tino
Hallo Nepumuk,
kennst Du eine Funktion um die Spalte eines ListView optimal zu verteilen?
Wenn zum Beispiel der rechte Scrollbalken angezeigt wird,
ist der innere Bereich kleiner und unten wird auch ein Scollbalken angezeigt.
Ist der rechte Balken nicht da, wird auch der Balken unten nicht angezeigt.
Habe zwar Api Funktionen um die optimale Spaltenbreite einzustellen (nach Inhalt der Spalten),
aber nichts um diese optimal auf den inneren Bereich zu verteilen, so dass der untere Balken nicht sichtbar ist.
Gruß Tino
Anzeige
Ok., habe was...
18.03.2009 17:47:47
Tino
Hallo,
... brauchbares zusammengebastelt.
Nicht elegant aber, scheint aber auf den ersten Blick zu funktionieren.
Option Explicit

Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
' ListView-Spalten auf optimale Breite setzen 
Public Sub LVColumnWidth(oListView As MSComctlLib.ListView)
Dim Col As Long
 With oListView
  For Col = 1 To .ColumnHeaders.Count - 1
   .ColumnHeaders(Col).Width = .Width / .ColumnHeaders.Count
  Next Col
  
  SendMessage .hwnd, &H1000 + 30, .ColumnHeaders.Count - 1, ByVal -2
 End With
End Sub

Private Sub UserForm_Initialize()
Dim MeArea
Dim i As Long

MeArea = Range("A2:C" & Cells(Rows.Count, 3).End(xlUp).Row)
 
 With ListView1
  .ColumnHeaders.Add 1, , Range("A1")
  .ColumnHeaders.Add 2, , Range("B1")
  .ColumnHeaders.Add 3, , Range("C1")
  .View = lvwReport
  
 For i = 1 To Ubound(MeArea, 1)
  .ListItems.Add i, , MeArea(i, 1)
  .ListItems(i).SubItems(1) = MeArea(i, 2)
  .ListItems(i).SubItems(2) = MeArea(i, 3)
 Next i
 End With
 LVColumnWidth ListView1
End Sub


Gruß Tino

Anzeige
noch nicht ganz...
18.03.2009 18:28:49
Tino
Hallo,
so ganz genau stimmt es nicht,
die letzte Spalte ist zu breit bzw. zu schmal je nach dem ob der Balken links da ist oder auch nicht.
Habe jetzt den Rest der hinten übrig bleibt auf die anderen verteilt.
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hwnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
' ListView-Spalten auf optimale Breite setzen 
Public Sub LVColumnWidth(oListView As MSComctlLib.ListView)
Dim Col As Long
Dim sngWidth As Single

 With oListView
  
  For Col = 1 To .ColumnHeaders.Count - 1
   .ColumnHeaders(Col).Width = .Width / .ColumnHeaders.Count
  Next Col
  
  SendMessage .hwnd, &H1000 + 30, .ColumnHeaders.Count - 1, ByVal -2
  sngWidth = .ColumnHeaders(.ColumnHeaders.Count - 1).Width
  sngWidth = sngWidth + ((.ColumnHeaders(.ColumnHeaders.Count).Width - sngWidth) / .ColumnHeaders.Count)
  
  For Col = 1 To .ColumnHeaders.Count
   .ColumnHeaders(Col).Width = sngWidth
  Next Col
  
 End With
End Sub


Gruß Tino

Anzeige
AW: @Tino, noch nicht ganz...
24.03.2009 08:20:56
wonne69
Hallo alle zusammen,
nochmal danke für Eure Hilfe hat alle geklappt....
Frage an Tino:
Habe Deinen code mit der automatischen Spalteanpassung ausprobiert, funzt aber nicht so ganz.
Die Spalten haben alle das gleiche Maß, hast Du eine Idee?
AW: @Tino, noch nicht ganz...
24.03.2009 09:01:56
Tino
Hallo,
"...Die Spalten haben alle das gleiche Maß..."
Dies war von mir so beabsichtigt, dass alle Spalten gleich verteilt sind.
Hier mal ein Beispiel um die Spalten an dem Inhalt anzupassen.
https://www.herber.de/bbs/user/60603.xls
Gruß Tino
AW: @Tino, noch nicht ganz...
24.03.2009 09:20:30
wonne69
Jaaaaa so klappt es....
Sry wenn ich nerve aber ich bin noch VBA Anfänger.......
Danke für die schnelle Antwort.....
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige