Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: CarstenP am April 16, 2024, 12:39:28

Titel: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: CarstenP am April 16, 2024, 12:39:28
Hallo zusammen.

Ich möchte folgendes abbilden. Es gibt eine Tabelle Personen und es gibt eine Tabelle mit Lehrgängen. N Personen sollen nun einem Lehrgang zugeordnet werden können.

Mir schweben zwei Listenfelder und ein oder mehrere Buttons zum Verschieben vor. Im linken sind zunächst alle Personen aufgelistet. Wenn ich einen oder mehrere Personen markiere und einen Button betätige, kann ich diese ausgewählten Personen in das Listenfeld rechts (den Lehrgang) verschieben. An dieser Stelle soll noch keine Tabellenmanipulation stattfinden. Außerdem sollten diese Personen aus dem linken Feld verschwinden - sie sind ja schon verschoben.

Ich gehe davon aus, dass ich den Inhalt der Listenfelder per VBA und Arrays ansteuern muss, finde aber keinen Ansatz, wie ich das angehen kann. Kennt jemand einen guten Link oder ein paar Codeschnippsel? Vielen Dank schon vorab!
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: PhilS am April 16, 2024, 13:50:36
Zitat von: CarstenP am April 16, 2024, 12:39:28Ich gehe davon aus, dass ich den Inhalt der Listenfelder per VBA und Arrays ansteuern muss, finde aber keinen Ansatz, wie ich das angehen kann. Kennt jemand einen guten Link oder ein paar Codeschnippsel? Vielen Dank schon vorab!
Grundsätzlich korrekt, die Arrays kannst du dir aber wahrscheinlich sparen.
Wenn du dir mal die Eigenschaften und Methoden des Listbox-Controls (z.B. AddItem, RemoveItem,  ItemsSelected) anschaust, sollte ein möglicher Lösungsweg deutlich werden.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: CarstenP am April 16, 2024, 13:53:52
Na, das ist doch mal ein Hinweis. Danke.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: MzKlMu am April 16, 2024, 13:55:06
Hallo,
ZitatAn dieser Stelle soll noch keine Tabellenmanipulation stattfinden. Außerdem sollten diese Personen aus dem linken Feld verschwinden - sie sind ja schon verschoben.
Das wird aber ohne Tabellenmanipulation nicht funktionieren, denn Du willst ja bereits verschobene Personen ausschließen. Dazu muss die Datenherkunft (Tabelle > Abfrage) des Listenfeldes angepasst werden.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: PhilS am April 16, 2024, 15:07:50
Zitat von: MzKlMu am April 16, 2024, 13:55:06Das wird aber ohne Tabellenmanipulation nicht funktionieren, denn Du willst ja bereits verschobene Personen ausschließen. Dazu muss die Datenherkunft (Tabelle > Abfrage) des Listenfeldes angepasst werden.
In dem Szenario der Fragestellung darf keine der beiden Listboxen an eine Tabelle/Abfrage gebunden sein, sondern beide müssen per VBA mittels .AddItem gefüllt werden.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: CarstenP am April 16, 2024, 15:10:09
Zitat von: PhilS am April 16, 2024, 15:07:50In dem Szenario der Fragestellung darf keine der beiden Listboxen an eine Tabelle/Abfrage gebunden sein, sondern beide müssen per VBA mittels .AddItem gefüllt werden.
So hatte ich das auch verstanden. Ich möchte am Schluss mittels eines Button die Aktion bestätigen - dann muss natürlich in die Tabelle geschrieben werden.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: Josef P. am April 16, 2024, 16:09:28
Hallo!

Alternativ zur Variante mit der Werteliste als Datenquelle für die Listbox könntest du auch an eine temporäre Tabelle denken. Dann wäre ein Weiterverarbeiten mittels SQL-Anweisungen möglich.
Welche Variante besser geeignet ist, hängt vom Einsatz ab.

Eine weitere Variante:
Statt 2 Listboxen nur eine mit einer Checkbox zum Kennzeichnen der Auswahl verwenden.
Das kannst du mittels Multivalue-Datenfeld in einer Hilfstabelle umsetzen. Die Weiterverarbeitung der Auswahl kann dann per SQL über die Hilfstabelle oder mit VBA (Listbox.Value ergibt dann ein Array) erfolgen.

Gruß
Josef
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: CarstenP am April 16, 2024, 16:29:42
Danke für die vielen Tipps.
Ich versuche es erst einmal mit zwei Listfeldern, da mir das gängiger erscheint. Allerdings bekomme ich eine Fehlermeldung beim manipulieren der Liste: "Die Herkunftstyp-Eigenschaft muss auf Werteliste festgelegt sein..."
Habe dazu ein wenig gesucht - aber nichts passendes gefunden. Was muss bei RowSourceType mitgegeben werden?
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: Josef P. am April 16, 2024, 16:34:34
Zitat"Die Herkunftstyp-Eigenschaft muss auf Werteliste festgelegt sein..."
Habe dazu ein wenig gesucht - aber nichts passendes gefunden. Was muss bei RowSourceType mitgegeben werden?

... ich hab jetzt einmal nur deinen Satz etwas farbig aufgearbeitet. ;)
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: CarstenP am April 16, 2024, 16:43:40
Zitat von: Josef P. am April 16, 2024, 16:34:34... ich hab jetzt einmal nur deinen Satz etwas farbig aufgearbeitet. ;)

Ja. Danke. Mittlerweile hab ich es gefunden. ;)  Allerdings bedeutet dies doch, dass es eine mehr oder weniger statische Auswahl, eine Werteliste eben gibt. Mein SQL-Statement zur initialen Befüllung der Liste funktioniert jedenfalls nicht mehr:

sql = "SELECT MitarbeiterID, Anzeigename FROM abf_Mitarbeiter_AlleDaten"
    Me.lst_AlleMA.RowSource = sql
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: PhilS am April 16, 2024, 16:54:35
Zitat von: CarstenP am April 16, 2024, 16:43:40Allerdings bedeutet dies doch, dass es eine mehr oder weniger statische Auswahl, eine Werteliste eben gibt. Mein SQL-Statement zur initialen Befüllung der Liste funktioniert jedenfalls nicht mehr:
Genau darum ging es doch oben. Du kannst die Listboxen eben nicht direkt an eine Abfrage binden, sondern musst sie per VBA (.AddItem) füllen.
Statisch ist das nicht, weil du dann ja abhängig von den Benuzteraktionen wiederum mit VBA (.RemoveItem / .AddItem) Einträge von einer Liste in die andere verschiebst.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: ebs17 am April 16, 2024, 19:00:34
Gegenseitige Interaktion von Wertliste und SQL-Statement ist nicht nativ, sondern umständlich und damit hochdynamisch abzuwickeln. Mit den Folgen seiner Wünsche muss man dann leben.

ZitatAn dieser Stelle soll noch keine Tabellenmanipulation stattfinden.
...
Ich möchte am Schluss mittels eines Button die Aktion bestätigen - dann muss natürlich in die Tabelle geschrieben werden.
Ich würde da noch einmal nachfragen: Vor dem Buttonklick herrscht Unklarheit ob des Tuns bis hin zum Verwerfen der ganzen Auswahlen? Vielleicht sollte dem User geholfen werden statt ihn vor Probleme zu stellen.
Titel: Re: Auswahl von Listenfeld in zweites Listenfeld verschieben
Beitrag von: CarstenP am April 18, 2024, 12:26:18
Vielen Dank an alle für die wertvollen Hinweise. Hab ein Verständnisproblem beim Handling der Listfelder gehabt. Ich schaue mir das jetzt genauer an und lerne dabei. ;-)