Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Combobox sortieren

Combobox sortieren
09.05.2008 08:31:50
Dominik
Hey liebe Leute :)
ich bins mal wieder.
Habe nun gestern den ganzen Tag damit verbacht hier und in anderen Foren etwas zu Comoboxen sortieren zu finden. Habe auch jede Menge gefunden ... nur das Problem ist ... das ich in VBA totaler Neuling bin und noch keine ahnung habe ... kapier ich nicht was ich da in mein Code mitreinschrieben muss und das ganze zeug.
Mein Code sieht im Moment so aus:

Private Sub UserForm_Initialize()
Dim lZeile As Long
DSR.Tag = "X" ' ComboBox1_Change nicht durchlaufen
For lZeile = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Left(Cells(lZeile, 1).Value, 3) = "DSR" Then
With DSR
.AddItem Cells(lZeile, 1).Value
End With
End If
Next lZeile
If DSR.ListCount > 0 Then DSR.ListIndex = 0
DSR.Tag = "" ' ComboBox1_Change wieder zulassen
End Sub


Wäre schön wenn mir da jmd weiter helfen kann :)
MfG Dominik

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox sortieren
09.05.2008 11:34:00
fcs
Hallo Dominik,
in dem nachfolgenden Link gibt es eine sehr schöne allgemeine Lösung für das sortieren einer List- oder Combobox deren Elemente mit AddItem erstellt worden sind.
https://www.herber.de/forum/messages/829726.html
Die Prozedur
Public Sub SortBox(cltBox As Control, intSpalten As Integer, _
intSpalte As Integer, Optional bytWie As Byte = 1)
kopierst du in ein allgemeines Modul deiner Datei. Am besten änderst du -nachdem du das Eigenschaftenfenster im VBA-Editor eingeblendet hast- auch noch den Namen des Moduls in z.B. mod_BoxSort. Dann kannst du das Modul auch problemlos in andere VBA-Projekte kopieren oder exportieren/importieren.
In deiner Userform-Prozedur rufst du dann die Sortierfunktion auf:

Private Sub UserForm_Initialize()
Dim lZeile As Long
DSR.Tag = "X" ' ComboBox1_Change nicht durchlaufen
For lZeile = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Left(Cells(lZeile, 1).Value, 3) = "DSR" Then
With DSR
.AddItem Cells(lZeile, 1).Value
End With
End If
Next lZeile
If DSR.ListCount > 0 Then
Call SortBox(cltBox:=Me.DSR, intSpalten:=1, intSpalte:=1, bytWie:=1)
DSR.ListIndex = 0
End If
DSR.Tag = "" ' ComboBox1_Change wieder zulassen
End Sub


Gruß
Franz

Anzeige
AW: Combobox sortieren
09.05.2008 13:21:56
Dominik
Hey Franz :)
ich danke dir erstmal für deine Antwort ...
da ich es net weiss :P frag ich mal ... ob das hier ... was du geschrieben hast ...

Public Sub SortBox(cltBox As Control, intSpalten As Integer, _
intSpalte As Integer, Optional bytWie As Byte = 1)


reicht das für mein sortiervogang ? ich glaube ja nicht oder ? undaus dem andern Thema ... versteh ich Bahnhof :P das Problem ist ... ich werde wahrscheinlich nie wieder so großartig mit VBA zu tun haben ... und nur wegen dem einen Projekt gerade, das mir alles zu erlenen wäre bissle schlecht weil ich auch anderes lernen muss ... naja ... vllt kann mir jmd noch bisschen mehr helfen :)
wie ich die Funktion dann aufrufe :) das hab ich schon verstanden ...
Gruß Dominik

Anzeige
AW: Combobox sortieren
09.05.2008 13:46:26
fcs
Hallo Dominik,
reicht das für mein sortiervogang ? ich glaube ja nicht oder ?
Nein das reicht nicht. Du muss schon die gesamte Prozedur bis zum nächsten End Sub kopieren.
Deshalb hier noch mal der gesamte Code der Sortier-Prozedur.
undaus dem andern Thema ... versteh ich Bahnhof :P das Problem ist ... ich werde wahrscheinlich nie wieder so großartig mit VBA zu tun haben ... und nur wegen dem einen Projekt gerade, das mir alles zu erlenen wäre bissle schlecht weil ich auch anderes lernen muss ... naja
Wer lernen will, sollte auch schon mal eine Lösung, die sehr ähnlich dem eigenen Problem ist, versuchen nachvollziehen und ggf. anpassen. Und es schadet doch selten etwas mehr zu lernen als langfristig evtl. erforderlich.
... vllt kann mir jmd noch bisschen mehr helfen :)
Viel mehr als das was ich dir hier an Lösung aufgezeigt hab kannste wohl kaum erwarten.
Gruß
Franz

Public Sub SortBox(cltBox As Control, intSpalten As Integer, _
intSpalte As Integer, Optional bytWie As Byte = 1)
' So DIS 28.04.05
' SortBox sortiert nicht gebundene List- und Comboboxen. Gebundene List- und Comboboxen
' (Angabe bei RowSource oder ListFillRange) können NICHT sortiert werden.
' cltBox     : Name der Listbox die sortiert werden soll.
' intSpalten : Wieviele Spalten sollen mit sortiert werden. Sollte der Anzahl der Spalten
'              in der Listbox entsprechen
' intSpalte  : Nach welcher Spalte soll sortiert werden.
' bytWie     : 1 oder Nicht angegeben als Text
'            : 2 als Zahl, dann muß die ganze Spalte Zahlen enthalten.
'            : 3 als Datum, dann muß die ganze Spalte Datumwerte enthalten.
' Aufruf zum Beispiel so: ListBox1 mit 7 Spalten, Sortierung nach Spalte 1 Sortierordnung Text
' SortBox ListBox1, 7, 1  oder SortBox ListBox1, 7, 1, 1
' Oder so    : Listbox17 mit 2 Spalten, Sortierung nach Spalte 2 Sortierordnung Zahlen
' SortBox ListBox17, 2, 2, 2
Dim intLast As Integer, intNext As Integer, intCounter As Integer, intFehler As Integer
Dim strTmp As String, strFehlertext As String
Dim variLast As Variant, variNext As Variant
On Error GoTo Errorhandler
intFehler = 0
With cltBox
For intLast = 0 To .ListCount - 1
For intNext = intLast + 1 To .ListCount - 1
Select Case bytWie
Case 1
intFehler = 0
variLast = CStr(.List(intLast, intSpalte - 1))
variNext = CStr(.List(intNext, intSpalte - 1))
Case 2
intFehler = 1
variLast = CDbl(.List(intLast, intSpalte - 1))
variNext = CDbl(.List(intNext, intSpalte - 1))
Case 3
intFehler = 2
variLast = CDate(.List(intLast, intSpalte - 1))
variNext = CDate(.List(intNext, intSpalte - 1))
End Select
intFehler = 0
If variLast > variNext Then
For intCounter = 0 To intSpalten - 1
strTmp = CStr(.List(intLast, intCounter))
.List(intLast, intCounter) = CStr(.List(intNext, intCounter))
.List(intNext, intCounter) = strTmp
Next intCounter
End If
Next intNext
Next intLast
End With
Exit Sub
Errorhandler:
Select Case intFehler
Case 0
strFehlertext = "In der Listbox Sortierung ist ein Fehler aufgetreten !"
Case 1
strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Zahlen !"
Case 2
strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Datumswerte !"
Case Else
strFehlertext = "Unerwarteter Fehler !"
End Select
MsgBox strFehlertext & " Bitte informieren Sie 'So' ! " & vbCr & vbCr & _
"Fehler aufgetreten in " & cltBox.Name & " !" & vbCr & _
"Fehlernummer = " & Err.Number & vbCr & _
"Fehlerbeschreibung = " & Err.Description & vbCr & _
"Fehlersource = " & Err.Source, vbCritical, " Meldung vom Makro SortBox !"
End Sub


Anzeige
AW: Combobox sortieren
09.05.2008 14:00:07
Dominik
Hey Franz,
Mit dem nachvollziehen isses net so einfach wenn ich net weiss was der und der Code macht ... wenn kommentare dahinter stehen ... was gemacht wird ... oder was gemeint ist ... dann geht das schon ... aber meistens steht da nichst dabei ... nur Code ... und da is bei mir ende :P versteh ich eben net ... VB no nie was gemacht bis auf des jetzt
Aber ich versuch es nun mit dem Code wo die mir gepostet hast mal zu verstehen was hier geschiet ...
MfG Dominik

AW: zum Sortieren gibts Excel
09.05.2008 18:59:45
Daniel
Hi
was willst du eigentlich:
1. richtig Programmieren lernen ?
2. mit möglichst wenig aufwand die Combobox sortieren ?
im 2. Fall würde sich folgende Lösung anbieten:
- comboboxinhalt in einen freien Zellbereich einer Tabelle schreiben
- diesen Zellbereich sortieren
- inhalt des sortierten Zellbereichs wieder in die Combobox zurückschreiben
- Zellbereich wieder löschen
hier der Code dazu

Private Sub UserForm_Initialize()
ComboBox1.List() = Range("A1").CurrentRegion.Value
With ComboBox1
Range("D1").Resize(.ListCount, .ColumnCount) = .List
Range("D1").CurrentRegion.Sort key1:=Range("D1"), order1:=xlAscending, header:=xlNo
.List() = Range("D1").CurrentRegion.Value
Range("D1").CurrentRegion.ClearContents
End With
End Sub


relevant ist nur der Teil in er With-Klammer, die erste Zeile ist nur dazu da, die unsortierten Daten aus einem anderen Zellbereich einzulesen. (ist halt für mein Beispiel)
der Code entspricht 1:1 der Beschreibung.
Gruß, Daniel

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige