Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1232to1236
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

UserForm(Listbox -> Combobox ...)

UserForm(Listbox -> Combobox ...)
Matthias
Hallo Excelfreunde
Level

 B
1normale Excel/VBA-Kenntnisse

Formeln der Tabelle
ZelleFormel
B1=ERSETZEN("Kaum Excel/VBA-Kenntnisse";1;4;"normale")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Folgende Ausgangslage:
Ich fülle die Listbox1 mit Daten. (MultiSelect=1)
Nun möchte ich die angewählten Daten in der Reihenfolge in die Combobox1 schreiben, wie ich sie der Reihe nach in der Listbox ausgewählt habe.
So fülle ich die Combobox Private Sub CommandButton1_Click() Dim i& ComboBox1.Clear lblprodukt.Caption = "" With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) = True Then ComboBox1.AddItem .List(i) .Selected(i) = False End If Next End With ComboBox1.Text = "Hier Produkt wählen ..." ComboBox1.DropDown End Sub Ist das irgendwie machbar? Ich komm nicht drauf.
Ich möchte die Daten aber nicht einzeln einlesen, sondern es sollen erst alle Produkte in der Listbox angeklickt werden bevor sie in der Combobox als Aufträge zur Verfügung stehen.
Nur möchte ich eben in genau der angeklickten Reihenfolge in der Listbox die Daten in die Combobox schreiben.
Zum besseren Verständnis:
Klicke ich in Listbox1 zuerst z.B. den 5.Eintrag an und dannach den 2. Eintrag, so soll in der Combobox
auch diese korrekte Reihenfolge stehen.
Habt Ihr eine Idee, oder lässt sich das auf diesem Weg so nicht umsetzen?
Danke schon mal fürs Lesen
Gruß Matthias

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: UserForm(Listbox -> Combobox ...)
19.10.2011 21:08:49
Peter
Hallo Matthias,
das sollte so funktionieren:
Option Explicit

Private Sub CommandButton1_Click()
Dim lListBox  As Long
ComboBox1.Clear
For lListBox = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lListBox) Then
ComboBox1.AddItem ListBox1.List(lListBox, 0)
End If
Next lListBox
ComboBox1.Text = "Hier Produkt wählen ..."
End Sub

Gruß Peter
klappt leider nicht ...
19.10.2011 21:32:15
Matthias
Hallo Peter
Erstmal Danke für Deine Hilfe
Userbild
https://www.herber.de/bbs/user/77102.xls
Gruß Matthias
Anzeige
AW: klappt leider nicht ...
19.10.2011 21:36:05
Peter
Hallo Matthias,
ich glaube kaum dass das realisierbar sein wird, da Du mit MultiSelect immer nur die aufsteigende Reihenfolge der ListBox-Einträge geliefert bekommst.
Gruß Peter
Trotzdem Danke ... kwT
19.10.2011 21:42:18
Matthias
Ich hab mal die Bäume entfernt ;o)
19.10.2011 22:02:04
Matthias
Hallo
Habs nun so gemacht

Option Explicit
Private Sub UserForm_Activate()
Dim x&
For x = 2 To 21
ListBox1.AddItem Cells(x, 1)
Next
End Sub
Private Sub ListBox1_Change()
ComboBox1.AddItem Cells(ListBox1.ListIndex + 2, 1)
End Sub
Danke, Gruß Matthias
Das war nix ...
20.10.2011 19:08:45
Matthias
Hallo
Nee, das war Quatsch, Sorry.
Bin noch am tüffteln.
Gruß Matthias
Anzeige
AW: Das war nix ...
21.10.2011 11:04:14
Ass
Hallo, geht das hier?:

Private Sub CommandButton1_Click()
Dim i&
Dim MyDic As Object
Dim Arr As Variant
ComboBox1.Clear
'lblprodukt.Caption = ""
If ComboBox1.Tag = "" Then Exit Sub
Set MyDic = CreateObject("Scripting.Dictionary")
Arr = Split(ComboBox1.Tag, ":")
On Error Resume Next
For i = 1 To UBound(Arr)
If MyDic.exists(ListBox1.List(Arr(i))) Then
MyDic.Remove ListBox1.List(Arr(i))
Else
MyDic.Add ListBox1.List(Arr(i)), CStr(Arr(i))
End If
Next
On Error GoTo 0
ComboBox1.List = MyDic.keys
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = False
Next
End With
ComboBox1.Text = "Hier Produkt wählen ..."
ComboBox1.DropDown
ComboBox1.Tag = ""
MyDic.RemoveAll
Set MyDic = Nothing
End Sub


Private Sub ListBox1_Change()
ComboBox1.Tag = ComboBox1.Tag & ":" & ListBox1.ListIndex
End Sub
Gruß
Rudi
Anzeige
Ja, das war's :o)
21.10.2011 18:47:42
Matthias
Hallo
Vielen Dank für Deine Hilfe
Ich war unterdessen nicht untätig und hatte míttlerweile auch das Scripting.Dictionary-Objekt eingesetzt.
Ich hatte nun eine zweite Listbox benutzt, in die ich die selektierten Eintäge in der richtigen Reihenfolge reinschreibe.


Das hatte es so gelöst:

Private Sub ListBox1_Change()
Dim j&
If ListBox1.Selected(ListBox1.ListIndex) = True Then
ListBox2.AddItem Cells(ListBox1.ListIndex + 2, 1)
With ListBox2
For j = 0 To .ListCount - 1
.Selected(j) = True
Next
End With
End If
End Sub


Private Sub CommandButton2_Click()
Dim listTxT&
Dim objDic As Object
Set objDic = CreateObject("Scripting.Dictionary")
With ListBox2
For listTxT = 0 To .ListCount - 1
objDic(.List(listTxT)) = 0 'Unikate sammeln
'MsgBox .List(listTxT)
Next
End With
ComboBox1.List = objDic.keys 'Unikate der ListBox zuweisen
End Sub
Die Listbox2 hatte ich dann .Visible=False


Jetzt hatte ich nur noch noch das kleine Problem die Daten wieder zu entfernen, wenn ich in Listbox1 einen selektierten Eintrag wieder entferne, aber die Reihenfolge beizubehalten.
Das muß ich nun dank Deines Vorschlages nicht mehr weiter erarbeiten.
Ich bin Dir zu großem Dank verpflichtet.
DANKE
Gruß Matthias
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige