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

Listbox - Problem

Listbox - Problem
04.08.2016 17:23:31
Benedikt
Hallo Community,
ich habe nun den ganzen Tag an meinem Problem mit der Listbox getüftelt, komme aber nicht weiter und frage mich nun, ob das was ich vorhabe überhaubt geht.
Auf einem Tabellenblatt sind alle Mitarbeiter der Firma mit unterschiedlichen Daten niedergeschrieben. Eine Zeile für einen Mitarbeiter. Davon wird dann aus "A2 (Nachnamen), "B2 (Vorname)" die Listbox LBB befüllt. Nun sortiere ich in der Listbox den Namen je nach Hierarchie mit einem Spinbuttonhoch und runter. Alles kein Problem bislang.
Aber jetzt:
Nun, möchte ich jedoch, dass wenn ich den Mitarbeiter x auf Postion 5 schiebe, dies auch auf dem Tabellenblatt in bspw. G7 dann einfach eine 5 vermerkt wird.
Ich habe zig Varianten versucht, aber ich komme nicht auf die Lösung. Ich muss quasi den Namen in der Listbox vergleichen, die Position ermitteln und dann auch noch an die richtige Stelle schreiben. Dazu müssen aber die restlichen Namen natürlich auch wiederum angepasst werden.
Am besten wäre ein Spinbutton_change-Ereignis. Aber geht das überhaut so? Habt ihr Hilfestellung, wo so etwas schon gemacht worden ist? Das würde mir ja reichen. Denn weder hier noch auf Google konnte ich per SuFu etwas finden.
Vielen Dank im Voraus für eure Bemühung.
Grüße Benedikt

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox - Problem
04.08.2016 17:28:28
Bastian
Lade doch mal eine Datei hoch mit willkürlichen Namen .
Gruß Basti
AW: Listbox - Problem
04.08.2016 17:41:56
Peter
Hall Benedikt,
dann übernimm in deine ListBox in die Spalte 3 die Zeilen-Nummer gleich mit. Diese Spalte kannst du durch die Angabe ListBox-Width auf 0 und damit unsichtbar machen.
Dein Sort muss die Spalte lediglich mit sortieren undschon hast du immer die Zeilen-Nummer parat.
Gruß Peter
AW: Listbox - Problem
04.08.2016 18:28:24
Benedikt
Hallo Peter und Basti,
danke für euren schnellen Antworten. Ich habe aus Versehen meinen ersten Post aktualisiert, so dass er noch Mal erstellt worden ist. Das tut mir Leid.
@Peter: das ist ein super Ansatz, aber wenn der Name mit Position 1 in die Listbox geladen worden ist und ich ihn dann mittels Spinbutton in der Listbox auf Platz 2 verschiebe, dann würde, wenn ich deine Lösung richtig verstanden habe, immer noch die 1 in Spalte 3 hinter diesem Namen stehen. Richtig?
@Basti: Modle die Beispieldatei noch um. Muss nur ein paar Änderungen machen.
Anzeige
AW: Listbox - Problem
04.08.2016 18:38:22
ChrisL
Hi Benedikt
Eine Beispieldatei wäre interessant, aber ich würde zusätzlich gerne die "Sinnfrage" stellen. Um später eine Zuordnung zwischen Tabelle und ListBox zu erreichen, musst du die Position festhalten. Dies ginge aber in beide Richtungen, die Tabelle kennt die Position in ListBox, oder die ListBox kennt die Position in Tabelle (womit wir bei der Lösung von Peter wären).
cu
Chris
AW: Listbox - Problem
04.08.2016 19:12:59
Benedikt
Hallo noch Mal. Zur Verdeutlichung der Beispielmappe. Stört euch nicht am Anfangsfehler. Einfach debuggen. Es geht um die Usedom MAV. Dort werden in die Listbox oben alle Mitarbeiter geladen. Die untere Listbox enthält nur Mitarbeiter der Organisation B. Momentan werden sie nach Reihenfolge wie sie in der Tabelle stehen geladen. Ziel wäre es die Namen nach Reihenfolge der Zahlen in Spalte G in die untere Listbox einzutragen. Dann per Spinbutton hoch oder runter verschieben und anschließend mit der neuen Position in Spalte G schreiben. Hierbei müssen alle Namen (Listindex) neu geschrieben werden. Pro Organisation gibt es natürlich jede Position nur einmal. Versteht ihr, was ich meine?
Anzeige
AW: Listbox - Problem
05.08.2016 08:28:23
baschti007
Hey Chris
geht das nicht so
Info LBB.ColumnCount = 2 muss beim Laden der Userform sein

Dim iLast As Integer, iNext As Integer
Dim iTmp1
Dim iTmp2
With LBB
For iLast = 0 To .ListCount - 1
For iNext = iLast + 1 To .ListCount - 1
If .List(iLast, 1) > .List(iNext, 1) Then
iTmp1 = .List(iLast)
iTmp2 = .List(iLast, 1)
.List(iLast) = .List(iNext)
.List(iLast, 1) = .List(iNext, 1)
.List(iNext) = iTmp1
.List(iNext, 1) = iTmp2
End If
Next iNext
Next iLast
LBB.ColumnCount = 1
End With

Gruß BAsti
AW: Listbox - Problem
05.08.2016 09:02:22
Benedikt
Guten Morgen Basti,
danke für deine Antwort. Ich habe mal LBB.ColumnCount = 2 in UserForm_Initialize() untergebracht.
Dann habe ich deinen Code in Commandbutton5 hinterlegt. Da sich jedoch der gewünschte Effekt nicht einstellt, denke ich, dass das falsch von mir war.
Grüße Benedikt
Anzeige
AW: Listbox - Problem
05.08.2016 09:02:48
baschti007
Ups was vergessen =D
Bei laden der LBB muss auch noch die Spalte mit den Nummern geladen werden also mit in die schleife rein
LBB.List(LBB.ListCount - 1, 1) = Sheets(3).Cells(lZeile, 7).Value
AW: Listbox - Problem
05.08.2016 12:01:57
Benedikt
Hallo Basti,
habe diesen Code auf Commandbutton5 gesteckt, aber vermutlich muss der auch in die Userform_initialize?
Dim iLast As Integer, iNext As Integer
Dim iTmp1
Dim iTmp2
With LBB
For iLast = 0 To .ListCount - 1
For iNext = iLast + 1 To .ListCount - 1
If .List(iLast, 1) > .List(iNext, 1) Then
iTmp1 = .List(iLast)
iTmp2 = .List(iLast, 1)
.List(iLast) = .List(iNext)
.List(iLast, 1) = .List(iNext, 1)
.List(iNext) = iTmp1
.List(iNext, 1) = iTmp2
End If
Next iNext
Next iLast
LBB.ColumnCount = 1
End With
Deinen letzten Codeschnipsel habe ich mit eingebaut
Dim lZeile As Long
Dim lIndxA As Long
Dim lIndxI As Long
Dim sTemp As String
Dim i As Integer
For i = 1 To 6
Me.Controls("Textbox" & i) = ""
Next i
ListBox1.Clear
LBB.Clear
lZeile = 2
Do While Trim(CStr(Sheets(3).Cells(lZeile, 1).Value))  ""
ListBox1.AddItem Sheets(3).Cells(lZeile, 1).Value & ", " & Sheets(3).Cells(lZeile, 2)
If Sheets(3).Cells(lZeile, 6).Value = "B" Then
LBB.AddItem Sheets(3).Cells(lZeile, 1).Value
LBB.ColumnCount = 2
LBB.List(LBB.ListCount - 1, 1) = Sheets(3).Cells(lZeile, 7).Value
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
For lIndxA = 0 To Me.ListBox1.ListCount - 1
For lIndxI = 0 To lIndxA - 1
If Me.ListBox1.List(lIndxI) > Me.ListBox1.List(lIndxA) Then
sTemp = Me.ListBox1.List(lIndxI)
Me.ListBox1.List(lIndxI) = Me.ListBox1.List(lIndxA)
Me.ListBox1.List(lIndxA) = sTemp
End If
Next lIndxI
Next lIndxA
Aber nun kommen folgende Fehler:
Beim Laden der MAV wird die LBB nach wie vor mit den Nachnamen befüllt, von oben nach unten des Sheets 3, wenn sie die Zugehörigkeit B haben. Nun werden die Zahlen rechts neben den Namen angezeigt und zwar so wie sie in Sheets(3) Spalte 7 stehen. Könntest du mir noch verraten, wie die Namen anhand der Zahl in der LBB sortiert werden können? Wenn ich nun per Spinbutton den Namen hochschiebe, wird die Zahl nicht korrekt angezeigt.
MA1 ist nach dem Laden logischerweise auf Platz 3. Die Zahl ist auch logisch = 1. Bei Spinbutton-up ist MA1 auf Platz 2, Zahl = 3 und nochmal dann auf Platz 1 mit Zahl = 2. MA3 ist auf Platz 2 mit Zahl 3 und MA2 auf Platz 3 mit Zahl 1. Sie geben also an sich ihre letzte Zahl an den getauschten Namen weiter, richtig? Aber ich denke, dass man noch irgendwo ein -1 setzen muss?
Wenn ich übrigens den CB5 klicke, wo ich deinen obersten Code rein habe, was logischerweise falsch ist, dann lädt er die Liste genau so, wie wenn ich es öffne, aber ohne Zahlen.
Dann fehlt nur noch, dass die durch den SB veränderte Position eines MA's auch wieder an die Spalte 7 des Sheets 3 zurückgegeben wird, damit die neue Reihenfolge auch gespeichert wird.
Gruß Benedikt
Anzeige
AW: Listbox - Problem
05.08.2016 12:55:38
baschti007
Hmm ja
Da musst du einfach ein bissel testen mach mal ein Doppelklick auf die LBB guck dir das an dann verschieben angucken dann speichern angucken ;)
Gruß basti
https://www.herber.de/bbs/user/107416.xlsm
AW: Listbox - Problem
05.08.2016 17:00:30
Benedikt
Hallo Basti,
habe es jetzt mal auf den Commandbutton5 eingetragen und es funktioniert. Vielen Dank für deine Hilfestellung.
Private Sub CommandButton5_Click()
Dim lngs, intA, intB As Integer
lngs = 2
For intB = 1 To 15
For intA = 0 To LBB.ListCount - 1
If LBB.List(intA, 0) = Sheets(3).Cells(intB + 1, 1) Then
If Sheets(3).Cells(intB + 1, 6).Value = "B" Then
If LBB.List(intA, 0)  "" Then
Sheets(3).Cells(intB + 1, 7) = LBB.List(intA, 1)
lngs = lngs + 1
End If
End If
End If
Next intA
Next intB
End Sub
Zwar nicht schön, aber funktioniert. Wenn du Ideen hast für eine Vereinfachung, gib mir gerne Bescheid.
Grüße Benedikt
Anzeige
Bitte Sehr =D
10.08.2016 16:53:29
Bastian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige