Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
728to732
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
728to732
728to732
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ComboBox 2-spaltig sortiert befüllen

ComboBox 2-spaltig sortiert befüllen
06.02.2006 22:16:04
reiner
Hallo Leute,
wie kann ich eine ComboBox mit den Inhalten von Spalte 1 (Familienname) und Spalte 2 (Vorname) im Verhältnis 60:40 2-spaltig alphabetisch sortiert befüllen? Nach dem Einlesen und sortieren soll der erste mit dem Buchstaben „A“ beginnende Familienname mit dem zugehörigen Vornamen angezeigt werden.
Mit nachfolgendem Beispielcode erscheint nach dem Einlesen zwar der 1. mit „A“ beginnende Familienname sortiert im Anzeigefenster der ComboBox, die Vornamen werden allerdings nicht mit sortiert; es wird auch kein Vorname im Anzeigefenster angezeigt.
Dim Datensätze%, Anzahl%, MA()

Private Sub UserForm_Initialize()
[a1].CurrentRegion.Select
Datensätze = Selection.Rows.Count
ReDim MA0(Datensätze - 2, 1)
With UserForm2.cboNamen
.ColumnCount = 2
.ColumnWidths = "60;40"
End With
For Anzahl = 2 To Datensätze
MA(Anzahl - 2, 0) = Selection.Cells(Anzahl, 1)
UserForm2.cboNamen.List = MA
'UserForm2.cboNamen.ListIndex = 0
Next Anzahl
For Anzahl = 2 To Datensätze
MA(Anzahl - 2, 1) = Selection.Cells(Anzahl, 2)
UserForm2.cboNamen.List = MA
UserForm2.cboNamen.ListIndex = 0
Next Anzahl
Range("A1").Select
‘Sortierung Familienname:
With cboNamen
If .ListCount = 0 Then Exit Sub
vErster = 0
vLetzter = .ListCount - 1
For vAktuell = vErster To vLetzter
For vNächster = vAktuell + 1 To vLetzter
If .List(vAktuell) > .List(vNächster) Then
vBuffer = .List(vNächster)
.List(vNächster) = .List(vAktuell)
.List(vAktuell) = vBuffer
End If
Next vNächster
Next vAktuell
End With
End Sub

Kann mir jemand verraten wie der Code erweitert werden muss um meinen Wunsch vollständig zu erfüllen?
mfg
reiner

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
06.02.2006 22:50:27
Daniel
Hallo,
Machs doch nicht so kompliziert
Gib deiner Tabelle einen Namen und schreibe diesen in der Eigenschaftsliste der Combobox in das Feld "RowSource"
Dann erscheinen Daten in der Comboboxliste so wie sie in der Ursprungstabelle sortiert
sind und du sparst dir den ganzen Code für die zuweisung.
Wenn du jetzt Daten hinzufügst, brauchst du an der combobox nichts zu ändern, du brauchst nur in den Namen zu kontrollieren, ob der verwendete Namen noch die ganze Tabelle abdeckt.
Die Eigenschaft ColumnCount = 2 müsste eigentlich ausreichen, um beide Spalten anzuzeigen. Experimentier mal ein bisschen mit den ColumnWidths
Gruß, Daniel Eisert
Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
06.02.2006 23:28:35
reiner
Hallo,
Du machst es Dir einfach; da die Daten in Spalten 1 und 2 der Ursprungstabelle nicht alphabetisch geordnet sind und auch nicht geordnet werden können -da die zugehörigen Datensätze bereits in einer anderen Spalte geordnet sind- bleibt mir nach wie vor nur die ComboBox zum sortieren. Das ist der Grund meiner Anfrage.
mfg
reiner
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 00:36:22
Daniel
Klar, so einfach wie möglich, darum geht es ja ;-)
Brauchst du die Sortierung während die Userform aktiv ist?
Wenn nein, dann kannst du ja beim initialisieren der Userform die Daten alphabetisch sortieren und beim Verlassen wieder zurücksortiern (wenns optisch stört, hilft ja application.Screenuptdating = false).
Sollte die Sortierung immer erhalten bleiben müssen, würde ich die Namensdaten in ein anderes Sheet kopieren, sortieren und dann der Listbox zuweisen.
Ist wahrscheinlich auch einfacher und schneller als die Listbox in alphabetischer Reihenfolge zu befüllen, weil es ohne Schleifen auskommt und die Hauptarbeit von originären Excel-Funktionen erledigt wird.
Gruß, Daniel Eisert
Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 10:51:51
reiner
schau Dir mal den Vorschlag von Sepp an, da gibt es eine Lösung die Deinem Vorschlag ähnlihc ist.
reiner
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 00:29:36
Josef
Hallo Reiner!
Ungetestet!
Private Sub UserForm_Initialize()
Dim rng As Range, varA As Variant, varB As Variant

Set rng = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)

varA = rng

rng.Sort [A1], xlAscending, [B1], , xlAscending

varB = rng

rng = varA

Set rng = Nothing

With cboNamen
  .ColumnCount = 2
  .ColumnWidths = "60;40"
  .List = varB
End With

End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 10:50:05
reiner
Hallo Sepp,
Dein Vorschlag ist im Gegensatz zu meinem ursprünglichen Ansatz deutlich einfacher aufgebaut und sortiert die Inhalte beider Spalten auch in der richtigen Reihenfolge, das funktioniert bestens -danke.
Allerdings habe ich trotz diverser Versuche noch keine Möglichkeit gefunden um den ersten Eintrag nach dem Einlesen im weißen Anzeigefenster der ComboBox anzuzeigen; nach dem Einlesen bleibt es weiß und leer.
Bei meiner ersten Version ließ sich dieses wie folgt realisieren:
UserForm1.cboNamen.ListIndex = 0
Wie lässt sich ein gewählter Eintrag mit dem Inhalt aus Spalte 1 und 2 im Anzeigefenster gleichzeitig darstellen? Zur Zeit wird nur der Wert aus Spalte 1 angezeigt. Der Wert aus Spalte 2 sollte auch unbedingt angezeigt werden, da sich manche Namen in Spalte 1 wiederholen und nur durch den Vornamen eindeutig ausgewählt werden können.
Die nächste Frage war bislang nicht Gegenstand meiner Anfrage: Wie lassen sich nach Anwahl des aus Familien- und Vornamen bestehenden Eintrags, weitere diese Person betreffende Daten in einem oder mehreren Textfenstern anzeigen? Gibt es ein Kriterium der ComboBox das sich nach getroffener Wahl für eine weitere Bearbeitung nutzen lässt?
mfg
reiner
Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 12:11:43
Josef
Hallo Reiner!
Zu 1)
Im With Rahmen einfach ".Listindex = 0" hinzufügen.
Zu 2)
Geht so nicht, weil eine Combo immer nur eine Spalteneintrag darstellt.
Man könnte zwar die Einträge verknüpfen, aber das ist in der Praxis nicht sehr praktikabel.
Zu 3)
Lass einfach alle Spalten deiner Liste in die Combo einlesen und stelle die
Breite der Spalten die nicht angezeigt werden sollen auf 0.
Dann kannst du einfach die Spalteninhalte in die Textboxen einlesen.
Wenn du allerdings die Inhalte ändern/bearbeiten willst, brauchst du
zum zurückschreiben in die Tabelle, eine eindeutige zuordnung.
Der Listindex eignet sich in diesem Fall nicht, weil dei Combo sortiert ist.
Kannst du das Umsetzen? Wenn nicht, dann mach ich dir ein Beispiel!
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 15:05:53
reiner
Hallo Sepp,
gern komme ich auf das Angebot zu Punkt 3 zurück. Es sollen nur die Werte in den Textboxen angezeigt aber nicht bearbeitet werden.
zu Punkt 2: wie aufwändig ist es denn die Einträge zur Anzeige in der CB zu verknüpfen?
mfg
reiner
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 16:19:41
Josef
Hallo Reiner!
Hier das Beispiel.
https://www.herber.de/bbs/user/30758.xls
Da die Einträge in den Textboxen angezeigt werden, braucht man die Combo
nicht mehr zu manipulieren!
'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 17:31:48
reiner
Hallo Sepp,
danke für die Beispieltabelle mit dem Code.
Hierzu habe ich noch Fragen:
1. Ist es möglich die in einigen Tabellenzellen als benutzerdefiniertes Zahlenformat zugefügte Einheit z.B. „Jahr“, „Monat“ usw. in den Textboxen anzuzeigen? Wenn ja wie?
2. Zur Zeit werden die Inhalte von 15 Zellen in die Textboxen eingelesen. Wie kann ich verhindern das bestimmte Zellen in die Textboxen eingelesen werden? Beispielsweise sollen nur die Zellen in den Spalten: 1bis 4, 7bis 9, 11bis 14 eingelesen werden.
mfg
reiner
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 17:50:58
Josef
Hallo Reiner!
Die Textboxen müssen entsprechende namen haben!
Also Spalte 1 kommt in TextBox1,... Spalte 14 kommt in Textbox14!
Private Sub cboNamen_Change()
Dim intIndex As Integer
With cboNamen
  If .ListIndex > -1 Then
    For intIndex = 1 To .ColumnCount
      Select Case intIndex
        Case 1 To 4, 7 To 9, 11 To 14
          If Sheets("Tabelle1").Cells(2, intIndex).NumberFormat <> "General" Then
            Me.Controls("TextBox" & intIndex) = Format(.List(.ListIndex, intIndex - 1), _
              CStr(Replace(Replace(Replace(Sheets("Tabelle1").Cells(2, intIndex).NumberFormatLocal, _
              ".", "§"), ",", "."), "§", ",")))
          Else
            Me.Controls("TextBox" & intIndex) = .List(.ListIndex, intIndex - 1)
          End If
      End Select
    Next
  End If
End With
End Sub


'******************************
'* Gruß Sepp
'*
'* Rückmeldung wäre nett!
'******************************

Anzeige
AW: ComboBox 2-spaltig sortiert befüllen
07.02.2006 21:37:44
reiner
Hallo Sepp,
im Moment bin ich im Hinblick auf Excel-VBA dank Deiner Hilfe wunschlos glücklich;
vielen Dank für die Unterstützung
reiner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige