DropDown für zelle

Hallo,

ich möchte dass neben jeder zelle ein Dropdown menü mit Werten erscheint. Wenn der Nutzer aber einen Wert eingibt, der nicht in der Liste steht, soll dieser auch in das Dropdown menü aufgenommen werden.
ist das möglich?

Danke

Sonja

Grüezi Sonja

ich möchte dass neben jeder zelle ein Dropdown menü mit Werten
erscheint. Wenn der Nutzer aber einen Wert eingibt, der nicht
in der Liste steht, soll dieser auch in das Dropdown menü
aufgenommen werden.
ist das möglich?

Woher beziehen denn diese DropDowns ihre Daten?
Kommen diese aus einem Zellenbereich irgendwo sonst auf dem Tabellenblatt oder in der Mappe?

Dann könntest Du das Ganze z.B. mit VBA lösen, indem Du den neuen Begriff dieser Liste hinzufügst.
Wenn die Zuweisung mit einem dynamischen Namen erfolgt ist der neue Begriff dann gleich mit in die Liste der Vorschläge aufgenommen.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Dann könntest Du das Ganze z.B. mit VBA lösen, indem Du den
neuen Begriff dieser Liste hinzufügst.

Das ist der erste Gedanke, ja. Aber ganz so einfach ist das bestimmt nicht, weil Du ja das Änderungsereignis abfangen müsstest, und das wird wahrscheinlich erst nach der Bestätigung der Eingabe ausgelöst. Diese Bestätigung erfolgt aber nicht, weil die Eingabe falsch war - neuer Wert eben.

Sollte es ein anderes geeignetes Ereignis geben, mag es funktionieren. Ansonsten muss man das anders lösen - z.B. über den vorgegebenen Wert „neuer Eintrag“. Immer, wenn der eingestellt wird, fragt man per Inputbox einen Wert ab. Der wird dann der Liste hinzugefügt (egal, ob direkt in der Gültigkeitsdefinition oder in einem Zellbereich) und danach in die Zielzelle geschrieben. Ja, so müsste es funktionieren. Also eigentlich doch ganz einfach. Was einem so alles einfällt beim Tippen … :wink:

Viele Grüße,
Kristian

Grüezi Christian

Dann könntest Du das Ganze z.B. mit VBA lösen, indem Du den
neuen Begriff dieser Liste hinzufügst.

Das ist der erste Gedanke, ja. Aber ganz so einfach ist das
bestimmt nicht, weil Du ja das Änderungsereignis abfangen
müsstest, und das wird wahrscheinlich erst nach der
Bestätigung der Eingabe ausgelöst. Diese Bestätigung erfolgt
aber nicht, weil die Eingabe falsch war - neuer Wert eben.

Wer sagt denn, dass die Eingabe die nicht in der Gültigkeitsliste enthalten ist nicht zugelassen werden soll?

Das kann über die weiteren Einstellungen der Gültigkeit gesteuert werden und macht dann keine weiteren Probleme.

Ich hatte die ganze Sache so aufgefasst, dass die Liste als Hilfe bei der Eingabe dienen sollte, nicht aber als Verhinderung anderer Eingaben.

Vielleicht sagt ja Sonja noch was dazu


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hi Jungs

Ich hatte die ganze Sache so aufgefasst, dass die Liste als
Hilfe bei der Eingabe dienen sollte, nicht aber als
Verhinderung anderer Eingaben.

Genauso ist es gedacht als Hilfe in die auch andere werte hinzugefügt werden können.
Die ersten Daten in der liste sind fix und kommen aus keiner anderen Spalte sondern sollten von hand eingegeben werden (sind nur 5)

Vielleicht sagt ja Sonja noch was dazu

hab ich jetzt gemacht :wink:
der Vorschlag von Thomas hört sich einfacher an, aber ich ahb bei euch beiden nciht verstanden wie ich es jetzt tatsächlich umsetzen soll.

gruß
Sonja


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Wer sagt denn, dass die Eingabe die nicht in der
Gültigkeitsliste enthalten ist nicht zugelassen werden soll?

Das kann über die weiteren Einstellungen der Gültigkeit
gesteuert werden und macht dann keine weiteren Probleme.

Achso. Stimmt. Das ist aber nicht auf den ersten Blick ersichtlich. Woher soll man wissen, dass man nicht nur die MELDUNG abschaltet, sondern auch die ÜBERPRÜFUNG.

Okay, hast Recht. Vorgehen: Bei jedem Change gucken, ob der Wert schon in der Liste ist. Wenn nicht, hinzufügen. Oder eben die „Neuer Wert“-Variante, bei der man per Dialog nach dem neuen Wert fragt. Dann entfällt die Kontrolle, ob der Wert schon gelistet ist.

Ob man auch eine „harte“ Liste, die direkt im Dialogfeld definiert ist, ändern kann … muss ja gehen … moment … ja, klar.

Ich hatte die ganze Sache so aufgefasst, dass die Liste als
Hilfe bei der Eingabe dienen sollte, nicht aber als
Verhinderung anderer Eingaben.

Ich auch. Aber ich dachte eben, dass die Verhinderung sozusagen immanent ist, nicht abschaltbar.

Vielleicht sagt ja Sonja noch was dazu

Hat sie ja :wink:

der Vorschlag von Thomas hört sich einfacher an, aber ich ahb
bei euch beiden nciht verstanden wie ich es jetzt tatsächlich
umsetzen soll.

Die Vorschläge von Thomas und mir sind technisch fast identisch und unterscheiden sich nur im Detail. Gemeinsamer Punkt ist: Man braucht ein kleines Makro, das die Eingaben in der Tabelle überwacht. Stellt es fest, dass ein noch nicht gelisteter Wert eingegeben werden soll, nimmt es diesen in die Liste auf. Dazu muss man wissen, wo sich diese Liste befindet - daher die erste Frage von Thomas. Sie kann einerseits in einem Tabellenblatt vorliegen (im gleichen oder auch in einem anderen, das ist egal), oder sie ist fest im Gültigkeits-Dialog (Menü) eingegeben. Letzteres hat den Vorteil, dass man sie nicht versehentlich überschreiben kann, aber auch den Nachteil, dass sie möglicherweise in der Länge begrenzt ist.

Aber warte, was erzähle ich … alles viel einfacher (wenn auch mit einem neuen Nachteil verbunden): Definiere als Liste einfach genau den Bereich, auf den Du die Gültigkeit anwendest. Beispiel:

Dein Eingabebereich, in dem also Werte eingegeben werden sollen, ist A1:A50. Dann markierst Du diesen Bereich, gehst auf „Daten / Gültigkeit“, dort bei „Zulassen:“ auf „Liste“ und dann unten bei „Quelle“ ganz rechts auf das Symbol. Es öffnet sich das kleine, schmale Fensterchen für den auszuwählenden Bereich. Nun markierst Du mit der Maus A1:A50 (also genau den Eingabebereich) und klickst in dem Fensterchen wieder auf das Symbol, um zurückzukehren in den Dialog. Dann wechselst Du auf den rechten Reiter „Fehlermeldung“ und nimmst ganz oben den Haken raus. Fertig.

Nachteil: Die angezeigte Liste im rop-Down-Menü wird immer genauso lang sein wie die Liste. Und wenn Du auf einer leeren Zelle stehst, musst Du dort in den meisten Fällen erstmal hochscrollen, um an die Werte ranzukommen. Aber probiert das einfach mal aus. Immerhin ist das ohne jedes Makro zu realisieren.

Kristian

Hallo Sonja,

Ich hatte die ganze Sache so aufgefasst, dass die Liste als
Hilfe bei der Eingabe dienen sollte, nicht aber als
Verhinderung anderer Eingaben.

Genauso ist es gedacht als Hilfe in die auch andere werte
hinzugefügt werden können.
Die ersten Daten in der liste sind fix und kommen aus keiner
anderen Spalte sondern sollten von hand eingegeben werden
(sind nur 5)

wenn ich das richtig verstanden habe, soll der Eingabebereich identisch sein mit dem Quellbereich.
(angenommen die bereits vorhandenen Einträge stehe in D1:smiley:5, für die Zellen D1:smiley:20 z.B. soll die Eingabehilfe erstellt werden)
Markiere den Bereich (hier D1:smiley:20), dann Daten, Gültigkeit, Register Einstellungen: Zulassen „Liste“, den Haken bei „Leere Zellen ignorieren“ entfernen, bei Quelle in das Eingabefeld klicken und dann direkt in dem Tabellenblatt D1:smiley:20 markieren, das Fenster mit OK schließen.
Nun kann man z.B. in D6 klicken, einen Eintrag wählen oder trotzt aufgeklappter Auswahlliste direkt in die Zelle schreiben oder in der aufgeklappten Auswahlliste auf den freien Platz unter dem letzten Eintrag klicken und dann in die Zelle schreiben.

LG Marion

danke an alle.

Ich werde mal beide varianten ausprobieren.
kann also gut sein es folgt nochmal ein artikel weil ich es nicht so ganz hinbekommen habe :wink:

Ich hatte die ganze Sache so aufgefasst, dass die Liste als
Hilfe bei der Eingabe dienen sollte, nicht aber als
Verhinderung anderer Eingaben.

Genauso ist es gedacht als Hilfe in die auch andere werte
hinzugefügt werden können.
Die ersten Daten in der liste sind fix und kommen aus keiner
anderen Spalte sondern sollten von hand eingegeben werden
(sind nur 5)
der Vorschlag von Thomas hört sich einfacher an, aber ich ahb
bei euch beiden nciht verstanden wie ich es jetzt tatsächlich
umsetzen soll.

Hi Sonja,

ich finde den Klick auf den Pfeil der Gültigkeitsliste unnötige Arbeit.

Wenn sowieso Vba ins Spiel kommt, könnte man autmatisch für die Zellen für das gelten soll, beim Betreten nebendran eine Listbox (aus Steuereelementtoolbox) erscheinen lassen mit der aktuellen Auswahl.

Nun braucht der User entweder was in die Zelle einentern oder klickt auf ein Item der Auswahl.
Der Rest macht Vba (also die Auswahl um den neuen Begriff erweitern usw.)

Wäre das etwas was dir gefallen würde? Wenn ja, wirf schon mal die Kaffeemaschine an, wenn Thomas dir das mal so schreiben soll :smile:))

Ich würde empfehlen, die Liste in einem Hilfsblatt, kann man ja ausblenden, zu führen, also da auch die ersten 5 Begriffe festzulegen.
das macht das Ganze pflegeleichter wenn sich mal die Begriffe ändern, oder man mal Begriffe aus der Auswahl löschen will usw.
Für Vba ist es sehr viel Aufwandseinfacher, wenn die dortige Liste ohne Leerzellen lückenlos von A1 bis Ax geführt wird.

Gruß
Reinhard

Gruß
Reinhard

Grüezi Maädel :wink:

Hi Jungs

Ich hatte die ganze Sache so aufgefasst, dass die Liste als
Hilfe bei der Eingabe dienen sollte, nicht aber als
Verhinderung anderer Eingaben.

Genauso ist es gedacht als Hilfe in die auch andere werte
hinzugefügt werden können.
Die ersten Daten in der liste sind fix und kommen aus keiner
anderen Spalte sondern sollten von hand eingegeben werden
(sind nur 5)

Vielleicht sagt ja Sonja noch was dazu

hab ich jetzt gemacht :wink:
der Vorschlag von Thomas hört sich einfacher an, aber ich ahb
bei euch beiden nciht verstanden wie ich es jetzt tatsächlich
umsetzen soll.

Ich habe mal eine kleine Demo-Mappe verfasst in der die Liste mit den Eingabewerten getrennt von den DropDowns geführt wird und über einen dynamischen Namen zur Verfügung gestellt wird.

Die DropDowns sind in A1:A10 enthalten - können aber ohne weiteres die ganze Spalte A einnehmen.

Bei Eingabe eines Wertes, der nicht in der Liste steht, wird nachgefragt ob er der Liste hinzugefügt werden soll, wenn ja wird dies gemacht und die Liste auch gleich sortiert.

Das Ganze ist eine Kombination aus VBA-Code, den Features aus Daten/Gültigkeit und einem dynamischen Bereichsnamen unter Namen/Einfügen/Definieren.

http://users.quick-line.ch/ramel/Demo-Daten/DropDown…

Schau mal ob dies deinen Vorstellungen entspricht und ob Du damit zurecht kommst.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallöchen Thomas,

Ich habe mal eine kleine Demo-Mappe verfasst in der die Liste
mit den Eingabewerten getrennt von den DropDowns geführt wird
und über einen dynamischen Namen zur Verfügung gestellt wird.

Die DropDowns sind in A1:A10 enthalten - können aber ohne
weiteres die ganze Spalte A einnehmen.

Bei Eingabe eines Wertes, der nicht in der Liste steht, wird
nachgefragt ob er der Liste hinzugefügt werden soll, wenn ja
wird dies gemacht und die Liste auch gleich sortiert.

mag ja sein daß die Liste sortiert wird, aber der neue Eintrag ist nicht drin (XL2002). Die Liste wird nicht nicht aktualisiert, wie auch, im Code steht nix.

Das Ganze ist eine Kombination aus VBA-Code, den Features aus
Daten/Gültigkeit und einem dynamischen Bereichsnamen unter
Namen/Einfügen/Definieren.

dazu sehe ich im Code nix!?

Und mal eine Nachfrage zu resize was du schon mehrmals hier geschrieben hast,
Wenn die activecell z.B D5 ist
kann ich mit resize die Selection auf B5:smiley:5 ausdehnen? Habe da die Hilfe zu resize nicht kapiert und schon erfolglos rumprobiert :frowning:

http://users.quick-line.ch/ramel/Demo-Daten/DropDown…

Schau mal ob dies deinen Vorstellungen entspricht und ob Du
damit zurecht kommst.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Ciao Reinhard

Die DropDowns sind in A1:A10 enthalten - können aber ohne
weiteres die ganze Spalte A einnehmen.

Bei Eingabe eines Wertes, der nicht in der Liste steht, wird
nachgefragt ob er der Liste hinzugefügt werden soll, wenn ja
wird dies gemacht und die Liste auch gleich sortiert.

mag ja sein daß die Liste sortiert wird, aber der neue
Eintrag ist nicht drin (XL2002). Die Liste wird nicht nicht
aktualisiert, wie auch, im Code steht nix.

Öööhhmmm, wo hast Du den denn gesucht und wo genau hast Du den neuen Eintrag getätigt?

Ich habe eben die Mappe aus dem Link heruntergeladen und bei mit hat es so geklappt wie ich es getestet hatte…

Das Ganze ist eine Kombination aus VBA-Code, den Features
aus Daten/Gültigkeit und einem dynamischen Bereichsnamen
unter Namen/Einfügen/Definieren.

dazu sehe ich im Code nix!?

Der Code ist im Codemodul des Tabellenblattes ein Worksheet_Change()-Ereignis, damits auch wirklich automatisch abläuft.

Dieses greift jedesmal wenn in Spalte A ein Eintrag gemacht wird, der nicht in der Liste enthalten ist - die DropDowns sind wie gesagt erstmal in A1:A10 enthalten, können aber auch weiter nach unten kopiert werden.

Gib also z.B. in A5 ‚Reinhard kann’s!‘ ein und bestätige die Nachfrage mit [Ja], dann kannst Du ab sofort in allen DropDowns diesen neuen Eintrag auswählen.
(in Spalte E wird der Eintrag auch gleich sichtbar einsortiert).

Und mal eine Nachfrage zu resize was du schon mehrmals hier
geschrieben hast,
Wenn die activecell z.B D5 ist kann ich mit resize die
Selection auf B5:smiley:5 ausdehnen?

Aber klaro doch - aber nur unter Zuhilfenahme von .Offset

Habe da die Hilfe zu resize nicht kapiert und schon erfolglos
rumprobiert :frowning:

Resize vergössert immer nach rechts und nach unten und zwar absolut - die Angaben für Zeile/Spalte entsprechen also der effektiven Ausdehnung des neuen Bereiches. Auch eine Verkleinerung kannst Du erzielen - fix bleit immer die linke obere Ecke des Ausgangs-Bereiches.

Da B5 nun links von D5 liegt kombiniere man das Ganze noch mit einem Offset (dessen Werte immer relativ zur linken oberen Ecke des Ausgangsbereiches anzugeben sind) und erhält dann sowas feines hier:

ActiveCell.Resize(1, 3).Offset(0, -2).Select

…wobei die Eigenschaften durchaus auch austauschbar sind:

ActiveCell.Offset(0, -2).Resize(1, 3).Select

Kommst Du damit nun etwas besser klar?


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Das kann ich mir jetzt mal nicht verkneifen:

Gib also z.B. in A5 ‚Reinhard kann’s!‘ ein und bestätige die
Nachfrage mit [Ja], dann kannst Du ab sofort in allen
DropDowns diesen neuen Eintrag auswählen.

Naja, und wenn es nicht funktioniert, dann gehört der Eintrag auch nicht in die Liste :wink:

Nichts für ungut, ist nur´n Scherz, Reinhard :wink:

Salü Reinhard

Das kann ich mir jetzt mal nicht verkneifen:

Sollst Du nicht; frisch drauf los, ich machs ja auch…

Gib also z.B. in A5 ‚Reinhard kann’s!‘ ein und bestätige die
Nachfrage mit [Ja], dann kannst Du ab sofort in allen
DropDowns diesen neuen Eintrag auswählen.

Naja, und wenn es nicht funktioniert, dann gehört der Eintrag
auch nicht in die Liste :wink:

Somit wäre die Lösung nicht nur funktionell sondern auch inhaltlich stimmig! :wink:

Nichts für ungut, ist nur´n Scherz, Reinhard :wink:

Keine Bange, das fasse ich nicht flasch auf :smile:

LG
Thomas

Off-Topic
Das war jetzt aber konjus hier :wink:

Du hast Reinhard geantwortet, obwohl ICH geschrieben habe.

Darüber hinaus hattest DU Dich angesprochen gefühlt, obwohl ich REINHARD meinte.

Mit anderen Worten: Du hast Dir praktisch selbst geantwortet und Dich dabei für Reinhard gehalten :wink:

Ich will Dir nicht unterstellen, dass es INHALTLICH so gemeint war, aber der reine Text spiegelt in meinen Augen genau das wider :smile:

By the way: Was ist eigentlich ein MVP? Ein Makro-verliebter Programmierer? Oder ein monströs virtuoser Programmierer? Oder doch einfach nur ein Mecklenburg-Vorpommeraner, so wie ich?

1 „Gefällt mir“

Grüezi Kristian

Das war jetzt aber konjus hier :wink:

Du hast Reinhard geantwortet, obwohl ICH geschrieben habe.

Darüber hinaus hattest DU Dich angesprochen gefühlt, obwohl
ich REINHARD meinte.

Mit anderen Worten: Du hast Dir praktisch selbst geantwortet
und Dich dabei für Reinhard gehalten :wink:

Ich will Dir nicht unterstellen, dass es INHALTLICH so gemeint
war, aber der reine Text spiegelt in meinen Augen genau das
wider :smile:

Uuups, da hatte ich wohl zu wenig genau gelesen - sorry.

Aber manchmal gehts mir halt wie hier beschrieben:

http://www.henningschuerig.de/blog/2007/05/21/wie-ic…

By the way: Was ist eigentlich ein MVP? Ein Makro-verliebter
Programmierer? Oder ein monströs virtuoser Programmierer?
Oder doch einfach nur ein Mecklenburg-Vorpommeraner, so wie
ich?

Nein, nur ein ‚Muss Viel Posten‘ :wink: - eine Auszeichnung von Microsoft:

http://mvp.support.microsoft.com/


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

http://www.henningschuerig.de/blog/2007/05/21/wie-ic…

Ja stimmt, der Text ist nicht ganz neu, aber gut :wink:

http://mvp.support.microsoft.com/

Achso :wink: Was es alles gibt. Wenn ich das meinen Kollegen erzähle, schicken die noch ein Empfehlungsschreiben an Microsoft :wink:

Mea Culpa Thomas,

mag ja sein daß die Liste sortiert wird, aber der neue
Eintrag ist nicht drin (XL2002). Die Liste wird nicht nicht
aktualisiert, wie auch, im Code steht nix.

Öööhhmmm, wo hast Du den denn gesucht und wo genau hast Du den
neuen Eintrag getätigt?

es lag an mir, ich hatte 1 und hatte 1 , konnte aber nicht Eins und Eins zusammenzählen :frowning: :smile:

EnableEvents ist hier nach dem Start immer auf auf False gesetzt, da eine meiner Codes beim Starten der Personl.xls einen Fehler produziert und nicht danach Enableevents auf True setzt.
Dadran lag es.

Resize vergössert immer nach rechts und nach unten und zwar
absolut - die Angaben für Zeile/Spalte entsprechen also der
effektiven Ausdehnung des neuen Bereiches. Auch eine
Verkleinerung kannst Du erzielen - fix bleit immer die linke
obere Ecke des Ausgangs-Bereiches.

Da B5 nun links von D5 liegt kombiniere man das Ganze noch mit
einem Offset (dessen Werte immer relativ zur linken oberen
Ecke des Ausgangsbereiches anzugeben sind) und erhält dann
sowas feines hier:
ActiveCell.Resize(1, 3).Offset(0, -2).Select
…wobei die Eigenschaften durchaus auch austauschbar sind:
ActiveCell.Offset(0, -2).Resize(1, 3).Select

Ja, jetzt habe ich Resize verstanden *glaub*
Hatte ich halt vorher noch nie benutzt und habe mehr Zeit gebraucht es zu verstehen.
Danke dir für deine Mühen.

Gruß
Reinhard

N’Abend Reinhard

Mea Culpa Thomas,

…Du kannst ruhig bei ‚Thomas‘ bleiben… :wink:

mag ja sein daß die Liste sortiert wird, aber der neue
Eintrag ist nicht drin (XL2002). Die Liste wird nicht nicht
aktualisiert, wie auch, im Code steht nix.

Öööhhmmm, wo hast Du den denn gesucht und wo genau hast Du
den neuen Eintrag getätigt?

es lag an mir, ich hatte 1 und hatte 1 , konnte aber nicht
Eins und Eins zusammenzählen :frowning: :smile:

…das gibt ja bekanntlich 11 - IMO?

EnableEvents ist hier nach dem Start immer auf auf False
gesetzt, da eine meiner Codes beim Starten der Personl.xls
einen Fehler produziert und nicht danach Enableevents auf
True setzt.
Dadran lag es.

§öser Code das, sehr §öser Code - der gehörte umgehend gelöscht und ins Daten-Nirvana verbannt…

Aber fein, dass es nun doch noch klappt.

Ja, jetzt habe ich Resize verstanden *glaub*
Hatte ich halt vorher noch nie benutzt und habe mehr Zeit
gebraucht es zu verstehen.

Kein Problem; ich finde die Methode schick, da muss man keine String-Akrobatik vollziehen und ist dennoch sehr flexibel. Zugegeben ein wenig mehr Vorstellungsvermögen ist vielleicht vonnöten, aber sonst geht eigentlich ganz flott.

Danke dir für deine Mühen.

Da nicht für, ist doch gern geschehen.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -