Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte von Listenfeld1 in Listenfeld2 übertragen

Werte von Listenfeld1 in Listenfeld2 übertragen
17.01.2015 14:47:34
Philipp Bolay

Hallo allerseits,
Ich habe eine Tabelle mit verschiedenen Strecken. Diese lese ich in ein Listenfeld1 ein.
Jetzt möchte ich erstmal eine Strecke in meinem Listenfeld1 markieren. Dann klicke ich Commandbutton1 und übertrage dadurch die ausgewählte Strecke in Listenfeld2.
Jetzt kann ich bspw. 6 Strecken von Listfeld1 in Listfeld2 übertragen.
Markiere ich mit der Maus eine Strecke in Listfeld2 so soll mit CommandButton 2 & 3 die Strecke hoch und runter verschoben werden können und so sozusagen die Reihenfolge verändert werden.
Sobald ich eine Strecke von Listfeld1 in Listfeld2 übertrage soll in einem Tabellenblatt der Name vermerkt werden. Verändere Ich die Reihenfolge soll sich da logischerweise im Tabellenblatt auch ändern...
Ich habe irgendwie ein generelles Systematikproblem... Würde man die angeklickten Strecken erst in eine Tabelle schreiben und dann wieder mit Listfeld2 auslesen oder direkt in Listfeld 2.....
Untenstehend mein Code den ich bisher hinbekommen habe.
Vielen Dank für eure Hilfe.
'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird

Private Sub UserForm_Initialize()
Dim lZeile As Long
'In dieser Routine laden wir alle vorhandenen
'Einträge in die ListBox1
ListBox1.Clear 'Zuerst einmal die Liste leeren
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
'Aktuelle Zeile in die ListBox eintragen
ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte von Listenfeld1 in Listenfeld2 übertragen
17.01.2015 15:57:10
Christian
hallo Philipp,
ein Bsp. für "nach rechts" und "nach oben". Der Rest funktioniert analog.
Die Übertragung in die Tabelle würde ich aber erst zum Schluss mit weiteren einem Button "bestätigen".
Das ständige Schreiben kostet Zeit. Daher hier auskommentiert.
Private Sub cmdRight_Click()
Dim i As Long
With Me.lstLeft
For i = 0 To .ListCount - 1
If .Selected(i) Then
Me.lstRight.AddItem .List(i)
.RemoveItem i
Exit For
End If
Next
End With
End Sub
Private Sub cmdUp_Click()
Dim i As Long
Dim vntTmp
With Me.lstRight
For i = 1 To .ListCount - 1
If .Selected(i) Then
vntTmp = .List(i - 1)
.List(i - 1) = .List(i)
.List(i) = vntTmp
Exit For
End If
Next
If .ListIndex > 0 Then
.ListIndex = .ListIndex - 1
End If
' Sheets("Tabelle1").Cells(1, 1).Resize(.ListCount) = .List
End With
End Sub
Gruß
Christian

Anzeige
Werte von Listenbox1 in Listenbox2
17.01.2015 22:09:33
Nepumuk
Hallo Philipp,
ich würde das wie im angehängten Beispiel, mit Hilfe von Spinbuttons lösen.
https://www.herber.de/bbs/user/95078.zip
Gruß
Nepumuk

AW: Werte von Listenfeld1 in Listenfeld2 übertragen
19.01.2015 22:34:26
Philipp Bolay
Hallo,
danke für die Rückmeldung. Beide Lösungen haben funktioniert. Habe jetzt das mit den Spinnbuttons umgesetzt. Super!
Frage 1.
Markiere ich in Listbox1 den obersten Eintrag und drücke Spinbutton1 so kopiert er alle verfügbaren strecken in Listbox2. Das sollte eigentlich nur die einzelne markierte Strecke sein.
Frage 2.
Gibt es die Möglichkeit das die Strecke dann trotzdem in Listbox1 bleibt. Also auch mehrfach in Listbox2 kopiert werden kann? Ich möchte mir dann nur einen Spinbutton zum kopieren von Listbox1 in Listbox2 machen und dann einen Button um in Listbox2 Strecken zu entfernen.
Frage3.
Ok es geht weiter. Ich möchte über einen Speichern/Aktualisieren Button (CommandButton6) die Namen der Listbox2 in das aktuelle Tabellenblatt speichern (funzt)
Jetzt möchte ich aber dass er gleichzeitig aus dem Streckenspeicher die jeweiligen Werte, zur Zeile passenden Werte dazu kopiert.
Also eigentlich simpel: Listindex2: Suche Name der Strecke (Bspw StreckeA) in Tabelle2 und kopiere entsprechende Zeile von Spalte B bis xx und füge diese im aktuellen Blatt hinter dem richtigen Namen (Aus listbox2 exportiert =StreckeA) ein.
Hier mal mein Code.. Das kopieren funktioniert. Leider sucht er sich nicht den richtigen Namen sondern kopiert einfach nacheinander... Zudem kommt er manchmal mit dem zählen durcheinander.
Private Sub CommandButton6_Click()
Dim i As Integer
Dim h As Long
Columns("A:X").Select
Selection.ClearContents
For i = 0 To ListBox2.ListCount - 1
Cells(i + 2, 1) = ListBox2.List(i)
With Sheets("Tabelle1")
For h = .Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If .Cells(h, "A") Like ListBox2.List(i) Then
Range(Cells(h, 2), Cells(h, 20)).Value = .Range(.Cells(h, 2), .Cells(h, 20)).Value
End If
Next h
End With
Next i
End Sub

Richtig gut wie ich vorran kommen. Danke für eure Unterstützung!! Ich lerne wirklich was dabei und war heute gute 8 Stunden beschäftigt damit ;)
Grüße und besten Dank!
Private Sub CommandButton5_Click()
Dim i As Long
With Me.ListBox3
For i = 0 To .ListCount - 1
If .Selected(i) Then
Me.ListBox2.AddItem .List(i)
.RemoveItem i
Exit For
End If
Next
End With
End Sub
Private Sub CommandButton6_Click()
Dim i As Integer
Dim h As Long
h = 0
i = 0
Columns("A:X").Select
Selection.ClearContents
For i = 0 To ListBox2.ListCount - 1
Cells(i + 2, 1) = ListBox2.List(i)
With Sheets("Tabelle1")
For h = .Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If .Cells(h, "A") Like ListBox2.List(i) Then
Range(Cells(h, 2), Cells(h, 20)).Value = .Range(.Cells(h, 2), .Cells(h, 20)).Value
End If
Next h
End With
Next i
End Sub
Private Sub CommandButton7_Click()
With Me.ListBox2
If .ListIndex > -1 Then .RemoveItem (.ListIndex)
End With
End Sub

'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
Private Sub UserForm_Initialize()
Dim lZeile As Long
Dim Zeile As Long
'In dieser Routine laden wir alle vorhandenen
'Einträge in die ListBox1
ListBox1.Clear 'Zuerst einmal die Liste leeren
ListBox3.Clear
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
Zeile = 2 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
'Aktuelle Zeile in die ListBox eintragen
ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
ListBox3.AddItem Trim(CStr(Tabelle5.Cells(Zeile, 1).Value))
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Zeile = Zeile + 1
Loop
'With Sheets("Tabelle2")
'Me.ComboBox1.List = Range("A1:A5").Value
'End With
End Sub
'Klick auf die ListBox Ereignisroutine
Private Sub ListBox1_Click()
Dim lZeile As Long
'Nur wenn ein Eintrag selektiert/markiert ist
If ListBox1.ListIndex >= 0 Then
lZeile = 2
'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End If
End Sub
'LIstbox3 !!!!!!!!!!!!!!!!!!!!
'Klick auf die ListBox Ereignisroutine
Private Sub ListBox3_Click()
Dim Zeile As Long
'Nur wenn ein Eintrag selektiert/markiert ist
If ListBox3.ListIndex >= 0 Then
Zeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle5.Cells(Zeile, 1).Value)) <> ""
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
Zeile = Zeile + 1 'Nächste Zeile bearbeiten
Loop
End If
End Sub

Private Sub SpinButton1_SpinDown()
Dim lngListIndex As Long
With ListBox2
Do While lngListIndex < .ListCount
If .Selected(lngListIndex) Then
ListBox1.AddItem .List(lngListIndex, 0)
.RemoveItem lngListIndex
Else
lngListIndex = lngListIndex + 1
End If
Loop
End With
End Sub

Private Sub SpinButton1_SpinUp()
Dim lngListIndex As Long
With ListBox1
Do While lngListIndex < .ListCount
If .Selected(lngListIndex) Then
ListBox2.AddItem .List(lngListIndex, 0)
.RemoveItem lngListIndex
Else
lngListIndex = lngListIndex + 1
End If
Loop
End With
End Sub

Private Sub SpinButton2_SpinDown()
Dim lngListIndex As Long
With ListBox2
lngListIndex = .ListCount - 1
If Not .Selected(lngListIndex) Then
Do While lngListIndex >= 0
If .Selected(lngListIndex) Then
.AddItem .List(lngListIndex, 0), lngListIndex + 2
.RemoveItem lngListIndex
.Selected(lngListIndex + 1) = True
End If
lngListIndex = lngListIndex - 1
Loop
End If
End With
End Sub

Private Sub SpinButton2_SpinUp()
Dim lngListIndex As Long
lngListIndex = 1
With ListBox2
If Not .Selected(0) Then
Do While lngListIndex < .ListCount
If .Selected(lngListIndex) Then
.AddItem .List(lngListIndex, 0), lngListIndex - 1
.RemoveItem lngListIndex + 1
.Selected(lngListIndex - 1) = True
End If
lngListIndex = lngListIndex + 1
Loop
End If
End With
End Sub

Private Sub UserForm_Initialize()
With Me.ComboBox1
.AddItem "Sportwagen"
.AddItem "Limuosine"
.AddItem "SUV"
.AddItem "Supersportwagen"
.ListIndex = "0"
End With
End Sub

Anzeige
Werte von Listenfeld1 in Listenfeld2 übertragen
20.01.2015 09:12:57
Nepumuk
Hallo Philipp,
kann ich nicht nachvollziehen. In meiner Beispieldatei passiert das nicht.
Gruß
Nepumuk

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige