VB 4/6- und VBA-Forum - Beitragsübersicht -
ThemaVB6: Listbox sortieren
Von It's me
Datum 20. Oktober 2015 um 09:57:19
Frage Ich hab im internet gesucht und auch was gefunden nur is das nicht das was ich suche bzw brauche.

Ich hab eine Listbox in 2 Spalten und zwar 1. Spalte sind Zahlen und in der 2. Spalte sind die Namen und ich wollte nun diese Listbox nach Spalte 1 sortieren. Nur wie

Dafür bräucht ich Hilfe - Danke schonmal
Antwort:
Von It's me
Datum 20. Oktober 2015 um 17:07:23
Antwort Ich hab mir das Beispiel angeschaut und auf meine bedürfnisse zu recht gebaut aber es tut sich nichts oder es kommen Fehlermeldungen
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

Private Const LB_SETTABSTOPS = &H192
Private Feld()

Enum EnumFilter
NoFilter
GetAllNumbers
GetFirstNumbers
GetLastNumbers
End Enum
Dim DataAscending As Boolean
Dim Filterstil As EnumFilter
Dim x As Integer, y As Integer

Dim nTab() As Long
Dim v As Variant

Private Sub Sort(Data() As Variant, Ascending As Boolean, StringSort As EnumFilter)
'Sortieren eines Variant-Datenfeldes
'Data() - zu sortierendes Datenfeld
'Ascending - aufsteigende Sortierung, falls True
'StringSort - numerische Sortierung bei Zeichenketten
Dim TempValue As Variant
Dim Element As Long
Dim Counter As Long

For Element = LBound(Data) To UBound(Data)
For Counter = Element + 1 To UBound(Data)
If Ascending Then
'absteigende Sortierung 3 > 2 > 1 ...
If VarType(Data(Element)) = vbString _
And StringSort <> NoFilter Then
'numerische Teilinformationen vergleichen
If Val(NumFilter$(CStr(Data(Element&)), StringSort)) < _
Val(NumFilter$(CStr(Data(Counter&)), StringSort)) Then
'und über diese teilwerte ggfs. Austausch der Gesamtinformationen vornehmen
TempValue = Data(Element)
Data(Element) = Data(Counter)
Data(Counter) = TempValue
End If
Else
If Data(Element&) < Data(Counter&) Then
TempValue = Data(Element&)
Data(Element&) = Data(Counter&)
Data(Counter&) = TempValue
End If
End If
End If
Next Counter
Next Element
End Sub

Private Function NumFilter(Text As String, Filterstyle As EnumFilter) As String
'numerische Werte aus Zeichenketten herausfiltern
Dim x As Long
Dim Zeichen As String
Dim Temp As String

If Filterstyle = GetAllNumbers Then
'alle numerischen Ziffern herausfiltern (123ABC456 = 123456)
For x = 1 To Len(Text$)
Zeichen$ = Mid$(Text$, x, 1)
If Asc(Zeichen$) >= 48 And Asc(Zeichen$) <= 57 Then
'Zeichen übernehmen
Temp$ = Temp$ & Zeichen$
End If
Next x

ElseIf Filterstyle = GetFirstNumbers Then
'nur die Ziffern bis zum ersten Buchstaben herausfiltern (123ABC456 = 123)
For x = 1 To Len(Text$)
Zeichen$ = Mid$(Text$, x, 1)
If Asc(Zeichen$) >= 48 And Asc(Zeichen$) <= 57 Then
'Zeichen übernehmen
Temp$ = Temp$ & Zeichen$
Else
'vorzeitiger Abbruch, falls bereits ein numerischer Wert ermittelt wurde und ein Buchstabe als Trenner erkannt wird
If Temp$ <> "" Then Exit For
End If
Next x

ElseIf Filterstyle = GetLastNumbers Then
'nur Ziffern herausfiltern, die rechts innerhalb einer Zeichenkette vorhanden sind (Trennzeichen erster Buchstabe (123ABC456 = 456)
For x = Len(Text$) To 1 Step -1
Zeichen$ = Mid$(Text$, x, 1)
If Asc(Zeichen$) >= 48 And Asc(Zeichen$) <= 57 Then
'Zeichen übernehmen
Temp$ = Zeichen$ & Temp$
Else
'vorzeitiger Abbruch, falls bereits ein numerischer Wert ermittelt wurde und ein Buchstabe als Trenner erkannt wird
If Temp$ <> "" Then Exit For
End If
Next
End If
'Ergebniszeichenkette zurückliefern
NumFilter$ = Temp$
End Function

Public Sub ListBox_SetTabStop(ByVal oList As Object, ParamArray vTabValue())
Dim nCount As Long
Dim id As Long

nCount = UBound(vTabValue) + 1
ReDim nTab(1 To nCount)
For id = 1 To nCount
nTab(id) = vTabValue(id - 1)
Next
SendMessage oList.hwnd, LB_SETTABSTOPS, nCount, nTab(1)
End Sub

Private Sub LblList_Click(Index As Integer)
If Index = 0 Then
ListBox_SetTabStop ListUnsort, 60, 60
ListUnsort.AddItem TxtPoints.Text & vbTab & TxtName.Text
TxtPoints.Text = "": TxtName.Text = "": TxtPoints.SetFocus

If ListUnsort.ListIndex > 0 Then
For y = 0 To ListUnsort.ListCount - 1
Feld(y) = ListUnsort.List(y)
Next
End If

Else

DataAscending = False

Sort Feld(), DataAscending, GetFirstNumbers
For x% = 1 To 10
'benutzerdefiniert sortiertes Datenfeld
'Datenfeld plus interne Filterergebnisse
Filterstil = GetFirstNumbers
ListSort.AddItem NumFilter$(CStr(Feld(x%)), Filterstil)
Next
End If
End Sub
Ich brauch im grunde nur die absteigende sortierung.
Was mach ich falsch
[ Antwort schreiben | Zurück zum VB 4/6- und VBA-Forum | Forum-Hilfe ]
Antworten
VB6: Listbox sortieren - It's me 20. Oktober 2015 um 09:57:19
Re: Listbox sortieren - Detlev Schubert 20. Oktober 2015 um 11:12:17
Re: Listbox sortieren - It's me 20. Oktober 2015 um 17:07:23
Re: Listbox sortieren - It's me 21. Oktober 2015 um 10:51:47
Re: Listbox sortieren - Neptun 21. Oktober 2015 um 14:37:32

Ihre Antwort
(Nick-)Name   Wichtige Informationen zur Namensangabe
E-Mail (opt.)  Wichtige Informationen zur Angabe einer eMail-Adresse
Thema   Wichtige Informationen zur Angabe eines Themas
Betrifft (IDE)  Visual Basic 6 (*.exe)
Ihre Antwort
Smilies
Mehr...
FettKursivUnterstrichen   Übersicht der Tipp-KürzelÜbersicht der Projekt-KürzelÜbersicht der Bücher-Kürzel 
Homepage
Titel
Root-Smilies              
             
             
[ Zurück zum VB 4/6- und VBA-Forum | Forum-Archiv | Forum-Hilfe | Chat ]

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB.Net | .Net-Forum | DirectX | DirectX-Forum | Chat | Ausschreibungen | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 13. Dezember 2015