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

Listenfeld ein-/auslesen

Listenfeld ein-/auslesen
04.12.2019 09:53:06
Erik
Hallo Excelgemeinde,
ich bin leider in Excel zu wenig versiert, um das Problem selbst zu lösen.
Ich will die Daten in Tabelle dynamisch mit einem Listenfeld auf einer Userform verbinden.
Und zwar so, dass die Daten aus der Tabelle (Bereich A3:A16 und B3:B16) in das Listenfeld übernommen werden.
Leider erscheint in meiner Listbox nur eine Spalte.?
Mit MultiselectMulti-Eigenschaft und mit FmListStyleOption lassen die Daten auch prima an-/auswählen.
Im Tabellenbereich D3:D16 ist der Status (x oder o) hinterlegt.
Ich möchte nun, dass beim Öffnen der Userform, dass diejenigen Elemente markiert dargestellt werden, welche mit einem x hinterlegt sind.
Auf der Userform soll, die Auswahl dann geändert werden können und der neue Status x oder o in die Tabelle zurückgeschrieben werden.
Kann mir hier jemand helfen.
Erik

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listenfeld ein-/auslesen
04.12.2019 09:57:59
Werner
Hallo Erik,
dann lade doch mal deine Datei hier hoch.
Gruß Werner
AW: Listenfeld ein-/auslesen
04.12.2019 12:55:16
Erik
Hallo Werner,
erstmal danke,
das "Einlesen" funktioniert, super.
Zusätzlich soll man im Listenfeld die Auswahl ändern können,
und diese geänderte Auswahl soll wieder zurückgeschrieben werden.
Bei mir werden nach "Auswahl übernehmen" die Werte alle auf "o" gesetzt.
Die markierten Einträge sollen aber als "x" zurückgeschrieben werden.
Erik
Anzeige
AW: Listenfeld ein-/auslesen
04.12.2019 13:18:13
Werner
Hallo,
in deinem Eingangsbeitrag:
Ich möchte nun, dass beim Öffnen der Userform, dass diejenigen Elemente markiert dargestellt werden, welche mit einem x hinterlegt sind.
Beim Start der Userform sind in der Listbox also alle Einträge, die im Tabellenblatt mit einem "x" gekennzeichnet sind markiert.
Und jetzt sollen da plötzlich wieder "x" eingetragen werden? Die haben doch im Tabellenblatt schon ein "x".
Vielleicht teilst du hier mal mit was du jetzt eigentlich willst. Weil im Moment habe ich da keine Ahnung.
Gruß Werner
AW: Listenfeld ein-/auslesen
04.12.2019 13:32:42
Erik
Hallo Werner,
okay, wahrscheinlich tue ich mir mit dem Beschreiben schwer.
Ich möchte nun, dass beim Öffnen der Userform diejenigen Elemente markiert dargestellt werden, welche mit einem x hinterlegt sind. Das funktioniert mit Deinem code super.
In der geöffneten Listbox möchte ich nun die Auswahl/Markierung manuell ändern.
und die geänderte Auswahl soll wieder zurückgeschrieben werden.
Ich hoffe ich schreibe jetzt etwas eindeutiger.
Erik
Anzeige
AW: Listenfeld ein-/auslesen
04.12.2019 13:52:10
Werner
Hallo,
und wer oder was hindert dich jetzt daran die Auswahl in der Listbox zu ändern?
Klick auf einen ausgewählten Eintrag wählt diesen ab.
Folgendes Szenario:
-du öffnest die Userform
-alle Einträge mit einem x in der Tabelle sind ausgewählt
-drei von den vorausgewählten Einträgen klickst du an und wählst sie somit ab
bei den restlichen, markierten Einträgen wird bei Klick auf den Button der Eintrag im Tabellenblatt von "x" auf "o" geändert.
Wenn du was anderes willst, dann weiß ich leider immer noch nicht was.
Gruß Werner
AW: Listenfeld ein-/auslesen
04.12.2019 14:12:05
Erik
Hallo Werner,
das sieht nach einem klassischen Mißverständnis aus.
-du öffnest die Userform - OK
-alle Einträge mit einem x in der Tabelle sind ausgewählt - OK
-drei von den vorausgewählten Einträgen klickst du an und wählst sie somit ab - OK
bei den restlichen, markierten Einträgen wird bei Klick auf den Button der Eintrag im Tabellenblatt von "x" auf "o" geändert. - Hier liegt das kleine Mißverständnis(x/o)
bei die restlichen, markierten Einträge sollen bei Klick auf den Button der Eintrag im Tabellenblatt das "x" zurückgeschrieben werden. Die demarkierten sollen auf "o" geändert werden.
Anzeige
AW: Listenfeld ein-/auslesen
04.12.2019 16:56:02
Werner
Hallo Erik,
sorry, aber da steige ich jetzt aus. Deine Logik scheint mit der meinen nicht komatibel zu sein.
Nach meiner Logik wähle ich die Daten aus, die ich ändern will, und die Daten, die ich nicht ändern will, die wähle ich nicht aus (in diesem Fall wähle ich die ab).
Und genau das macht das Makro.
Gruß Werner
AW: Listenfeld ein-/auslesen
04.12.2019 17:11:10
Erik
Hallo, trotzdem nochmals danke,
eigentlich soll der code wirklich nur die markierten Zeilen als "x" zurückschreiben. Als geänderte Auswahl.
Erik
AW: Listenfeld ein-/auslesen
04.12.2019 11:01:27
fcs
Hallo Erik,
Wenn die RowSource unter den Eigenschaften der Listbox zum Beispiel als Tabelle1!A3:B16 angegeben ist, dann
a) kannst du die 2. Spalte zusätzlich anzeigen, indem du unter den Eigenschaften für ColumnCount den Wert 2 einträgst.
b)zur Übernahme der Markierung aus der Tabelle in die Listbox und zum Eintragen der Änderungen in der Tabelle musst du den Folgenden Code im Code_Modul des Userforms einfügen/ergänzen.
Den Namen der Listbox im Code musst du ggf. anpassen.
LG
Franz
Option Explicit
Private bolInit As Boolean 'Merker das Markierungen aus Tabelle in Listbox gesetzt werden
Private Sub ReadWrite_Listbox(ByVal bolRead As Boolean)
'markierte Zeilen in Listbox selektieren (bolRead = True) _
oder Listbox-Auswahl in Tabelle eintragen bolRead = False)
Dim iItem As Integer
Dim strSource As String
Dim wksSource As Worksheet, strRange As String
'Datenquelle aus Eigenschaften der Listbox in Variable einlesen und ggf _
Hochkommata entfernen
strSource = Replace(Me.ListBox1.RowSource, "'", "")
'Tabellenblatt mit Quelldaten setzen
Set wksSource = ThisWorkbook.Worksheets(Left(strSource, InStr(1, strSource, "!") - 1))
'Zellbereich der Quelle auslesen
strRange = Mid(strSource, InStr(1, strSource, "!") + 1)
With wksSource.Range(strRange)
For iItem = 0 To Me.ListBox1.ListCount - 1
If bolRead = True Then
'ggf. Eintrag in Listbox markieren
Me.ListBox1.Selected(iItem) = _
LCase(.Cells(iItem + 1, 1).Offset(0, 3).Value) = "x"
Else
'Eintrag in Tabellenblatt markieren
If Me.ListBox1.Selected(iItem) = True Then
.Cells(iItem + 1, 1).Offset(0, 3).Value = "x"
Else
.Cells(iItem + 1, 1).Offset(0, 3).ClearContents
End If
End If
Next
End With
End Sub
Private Sub ListBox1_Change()
If bolInit = True Then Exit Sub
Call ReadWrite_Listbox(bolRead:=False)
End Sub
Private Sub UserForm_Initialize()
'markierte Zeilen in Tabelle in Listbox selektieren
bolInit = True
Call ReadWrite_Listbox(bolRead:=True)
bolInit = False
End Sub

Anzeige
AW: Listenfeld ein-/auslesen
04.12.2019 12:18:02
Erik
Hallo Franz,
danke,
sieht super aus,
aber ich bekomme es nicht zum laufen.
Ich habe den code in die userform1 gepackt.
Dort bringt mir meinen Rechner Laufzeitfehler 5.
Wenn ich den code unter Module\Modul1 ablege passiert leider nichts.
Erik
AW: Listenfeld ein-/auslesen
04.12.2019 13:00:35
Erik
Hallo Franz,
ich habe die Datei hierher gelegt,
Kannst Du nochmal schauen, wo der Code genau abgelegt werden muß.?
https://www.herber.de/bbs/user/133599.xlsm
Erik
AW: Listenfeld ein-/auslesen
05.12.2019 07:41:45
fcs
Hallo Erik,
für die Listbox1 hattest du unter Eigenschaften nur den Zellbereich ohne den Blattnamen angegeben. Deshalb funktioniert mein Makro, das diese Information auswertet, nicht.
Angepasste Einstellungen für Listbox1:
Userbild
Datei mit angepassten Makros.
- "o" wird eingetragen statt Zellinhalt zu löschen.
- Übernahme per Schaltfläche und nicht direkt nach Änderung in der Listbox
https://www.herber.de/bbs/user/133606.xlsm
Im Modul1 hab ich noch das Makro zur Anzeige der Userform hinterlegt.
LG
Franz
Anzeige
AW: Listenfeld ein-/auslesen
05.12.2019 09:57:08
Erik
Hallo Franz,
vielen Dank,
funktioniert einwandfrei.
Erik
AW: Listenfeld ein-/auslesen
05.12.2019 16:32:05
Erik
Hallo Franz,
danke nochmal für den Supercode.
Ist es denkbar, mit diesem Programm mehrere Listenfelder mit unterschiedlichen Adressen auf einer userform ein- und auszulesen, Plazierung ggf. mit einer Multiseite?
Erik
AW: Listenfeld ein-/auslesen
06.12.2019 09:56:19
fcs
Hallo Erik,
wenn mehrere Listboxen nach dem gleichen Schema abgearbeitet werden sollen, dann muss du Sub ReadWriteListbox mit Parametern/Variablen allgemeiner Formuliert werden.
In den Call-Anweisungen müssen diese Parameter dann entsprechend gesetzt werden.
Nachfolgend ein modifiziertes Makro.
Ob die Listboxen dann mehreren Multiseiten des Userforms stehen spielt keine Rolle.
Du musst dann nur entscheiden, ob du für alle Listboxen eine Schaltfläche zum Übernehmen ins Tabellenblatt verwenden willst, oder jede Listbox separat.
LG
Franz
Private Sub CommandButton1_Click()
'Button zum Übertragen der Listbox-Auswahl in die Tabelle
If bolInit = True Then Exit Sub
Call ReadWrite_Listbox(objListbox:=Me.ListBox1, bolRead:=False)
Call ReadWrite_Listbox(objListbox:=Me.ListBox2, bolRead:=False)
End Sub
Private Sub UserForm_Initialize()
'mi "x" markierte Zeilen in Tabelle in Listboxen selektieren
bolInit = True
Call ReadWrite_Listbox(objListbox:=Me.ListBox1, bolRead:=True)
Call ReadWrite_Listbox(objListbox:=Me.ListBox2, bolRead:=True)
bolInit = False
End Sub
Private Sub ReadWrite_Listbox(objListbox As msforms.ListBox, ByVal bolRead As Boolean, _
Optional ByVal iOffset As Integer = 3)
'markierte Zeilen in Listbox selektieren (bolRead = True) _
oder Listbox-Auswahl in Tabelle eintragen bolRead = false)
'objListbox = Variable für die zu verarbeitende Listbox
'iOffset = Anzahl Saplten rechts von 1. Spalte der ListboxSource in die x/o stehen _
sollen, Vorgabewert = 3
Dim iItem As Integer
Dim strSource As String
Dim wksSource As Worksheet, strRange As String
strSource = Replace(objListbox.RowSource, "'", "")
Set wksSource = ThisWorkbook.Worksheets(Left(strSource, InStr(1, strSource, "!") - 1))
strRange = Mid(strSource, InStr(1, strSource, "!") + 1)
With wksSource.Range(strRange)
For iItem = 0 To objListbox.ListCount - 1
If bolRead = True Then
objListbox.Selected(iItem) = _
LCase(.Cells(iItem + 1, 1).Offset(0, iOffset).Value) = "x"
Else
If objListbox.Selected(iItem) = True Then
.Cells(iItem + 1, 1).Offset(0, iOffset).Value = "x"
Else
.Cells(iItem + 1, 1).Offset(0, iOffset).Value = "o"
End If
End If
Next
End With
End Sub

Anzeige
AW: Listenfeld ein-/auslesen
06.12.2019 14:28:18
Erik
Hallo Franz,
danke Dir schon mal vorab.
Ich will das am WE testen.
Erik

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige