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

ComboBox Change

ComboBox Change
13.05.2009 23:50:16
Monika
Hallo,
ich melde mich noch einmal mit dem Problem, daß ich meine, daß bei einer Combobox, wenn der Anwender in das Textfeld einen neuen Wert einträgt anstatt einen vorhandenen auszuwählen, beim tippen jedes einzelnen Buchstabens 1x das Change-Ereignis ausgelöst wird.
War damit letzte Woche schon einmal zu Gange und bin dann mit Hilfe eines netten Ratschlages
hier so verblieben, das Problem zu umgehen:
Im Enter-Ereignis: alten Wert merken
Im Exit-Ereinis: prüfen ob Wert geändert wurde
hat den Vorteil, daß die Prüfung erst nach Abschluß der Feldeingabe erfolgt.
So ganz sauber programmiert erscheint mir das allerdings nicht.
Mein Verfahren der Umgehung hat außerdem einen gravierenden Nachteil:
Ich habe mehrere Comboboxen, deren Auswahlmöglichkeiten von einander abhängig sind.
Mit Change gab es den Vorteil, daß sowohl beim 1. Füllen im Init-Ereignis ein change ausgelöst wurde, als auch durch Änderung der auswahl durch den Anwender. So habe ich dann in cboBox1_Change das Füllen der abhängigen cboBox2 vorgenommen, wodurch dann auch ein Change für cboBox2 ausgelöst wurde, in welchem ich dann cboBox3 initialisiert habe.
Die Füllwerte der Komboboxen entstammen aus einer Datentabelle - wenn nun der Anwender nicht
auswählt, sondern einen ganz neuen Wert in das Textfeld eingibt, wird außer der Verarbeitung der Werte,
auch aus den Werten ein neuer Datensatz in die Tabelle geschrieben.
Danach muß ich dann die ganzen abhängigen Comboboxen wieder neu mit Auswahlwerten füllen, damit die Werte des neu hinzugekommene Datensatz auch sicher mit zur Verfügung stehen.
Durch die mehrstufige Abhängigkeit der Werte, die zur Auswahl stehen von Auswahlen in anderen Comboboxen, ist die Programmierung mit Exit-Ereignis aufwändiger - also es nicht nur mit einem
Unterprogramm "FuelleAbhaengigeFelder" getan ist. Das Problem liegt darin, daß ein Change-Ereignis
auch ausgelöst wird, wenn per Programm ein Feldinhalt geändert wird (durch neufüllen einer
Combobox z.B.) - Exit wird halt nur beim Verlassen des jeweiligen Feldes ausgelöst z.B.cbo1, dann kann ich zwar feststellen, ob dieses Feld speziell geändert wurde und ev. direkt abhängige Felder cbo2 mit ändern, aber was mache ich mit cbo3 welche von cbo2 abhängt?
was mache ich mit den Feldern, die wiederum von
Professioneller erschiene mir die Verwendung des Change Ereignisses. Allerding wie oft will ich das aufrufen, und darin dann Abfangen, z.B. mit .ListIndex = -1 dass kein Wert ausgewählt wurde.
M e i n e F r a g e:
Kennt ihr diesen Effekt, daß Change nach jedem Buchstaben ausgelöst wird?
Kann man ihn vermeiden? - Habe ich vielleicht irgendeinen Schalter übersehen, der festlegt daß change erst ausgelöst wird, wenn die eingabe in das Feld endgültig abgeschlossen ist?
Danke
Monika

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox Change
14.05.2009 00:00:06
Daniel
Hi
das wäre doch das EXIT-Ereignis.
das wird ausgelöst, wenn du auf ein anderes Steuerelement klickst.
nur damit ist eindeutik klar, daß die Eingabe abgeschlossen ist.
alles andere wäre Gedankenlesen.
Gruß Daniel
wozu gibt es dann Change?
14.05.2009 07:29:02
Monika
Hallo Daniel,
erst mal danke für Deine schnelle Antwort.
Heist das, dass ich falsch liege und Change nicht das geeinete Ereignis ist, um Änderungen des
Feldinhalts durch den Anwender zu erkennen?
Ich meine in der Hilfe steht das Change dazu da wäre, um Felder zu synchronisieren.
Und dann wird Change im Dauerfeuer bei jedem getippten Buchstaben ausgelöst? (Man arbeitet
ja schließlich nicht mit einer flotten Betriebssystemfunktion sondern mit einem Interpreter.)
Dachte eigentlich daran, dass dieses Verhalten vielleicht ein Excel-Fehler wäre, der ev. nur
in meiner alten Excel2000 Version auftritt. Ich kenne leider keine anderen Ereignisgesteuerten
Maskentools von anderen Programmiersprachen, so dass ich nicht vergleichen kann, wie das
Verhalten des Change-Ereignisses in anderen Umgebungen ist.
Danke.
Gruß Monika
Anzeige
AW: wozu gibt es dann Change?
14.05.2009 09:05:10
Rudiator
Wie waere es anstelle von _Change mit _AfterUpdate zu arbeiten?
Gruss Rudi
AW: wozu gibt es dann Change?
14.05.2009 10:26:16
Monika
Hallo Rudi,
Danke für Deinen Hinweis.
Ich bin mir nun gar nicht mehr sicher, wozu welches Ereignis eigentlich dienen soll.
Habe bisher schon irgendwo aus der Hilfe herausgefunden:
_Change Value hat den neuen Wert - Bound Value hat den alten Wert
_BeforeUpdate kann verwendet werden um die Aktualsierung abzubrechen und den alen Wert zu erhalten
_AfterUpdate Value und Bound Value haben den neuen Wert
Nun Frage ich mich aber, wo liegt der Unterschied zwischen dem Exit-Ereignis (was für mich nur eine Umgehung des Problems darstellt) und dem von Dir vorgeschlagenen _AfterUpdate.
Ich gehe doch richtig in der Annahme, dass _AfterUpdate nur auf Benutzereinbagen hin ausgelöst wird,
jedoch nicht wenn ich Programmtechnisch vom gewählten wert abhängige weitere combobox2 fülle und nun ein Ereignis benötige das dabei ausgelöst wird, in dem ich die Combobox3 fülle die von der Combobox2 abhängt.
Um etwas konkreter zu sein:
Ich wähle in Cbo1 ein Geschäft
dann sollen in Cbo2 alle Artikel zur Auswahl stehen, die ich jemals in dem Geschäft gekauft habe
(also üblicher weise dort kaufe)
wenn ich dann einen Artikel auswähle werden in cbo3 noch Artikelgruppen zur auswahl gestellt,
die abhängig vom gewählten Artikel aus einer Datenbank gelesen werden
So muss also
- wenn der Wert(value) cbo1 geändert wird
(beim init-Ereignis durch füllen der Liste oder durch den Anwender)
1. die Auswahl in cbo2 geändert werden
2. dadurch dass die Auswahl in cbo2 geändert wird
muß auch die Auswahlliste in cbo3 die entsprechenden Werte erhalten
- aber auch wenn sich nur die auswahl in cbo2 ändert,
soll sich die auswahllsite in cbo3 die etnsprechenden Werte erhalten
Da das Ändern von cbo3 an der Änderung von cbo2 hängt -
und zwar nicht nur wenn der Benutzer die Auswahl ändert,
sondern auch wenn die Liste über das Makro neu gefüllt wird
dachte ich, die übersichtlichste Art das zu programmieren wäre,
wenn man das Angaleichen der Auswahl cbo3 nicht an mehreren
Stellen im Programm anstößt (ev. ein Unterprogramm) sondern
immer in einem gleichen Ereignis - dafür erschien mir eben cbo2_Change
am geeignetsten
- nur eben, daß ich beim Testen festellen mußte, daß Change
wenn die Änderung durch Eingabe des Anwenders in das Textfeld
der Kombobox erfolgt, bei jedem Einzelbuchstaben ausgelöst wird
Anzeige
AW: wozu gibt es dann Change?
15.05.2009 10:07:40
Daniel
Hi
warum und wieso es welche Ereignisse gibt, bleibt wohl immer das Geheimnis der Programmierer in Redmont.
aber wenn ich dich richtig verstehe, ist CHANGE oder EXIT sowieso nicht das Optimale Ereignis.
wenn die Combobox2 in Abhängigkeit von der Combobox1 gefüllt werden soll, dann sollte das Füllen der Combox2 durch das ENTER-Ereignis der Combobox2 ausgelöst werden.
einzig und allein den Wert bzw die Auswahl in Combobox2 sollte man löschen, wenn Combobox1 geändert wird, aber das Befüllen erfolgt erst bei ENTER von Comobox2.
Gruß, Daniel
AW: wozu gibt es dann Change?
18.05.2009 14:33:43
Monika
Hallo Daniel,
vielen Dank für Deine Meinung.
Ja jetzt kann ich das für mich wohl abschließen.
Habe in einem Excel-Buch noch explizit die Aussage gefunden, daß Change bei jedem eingegebenen Buchstaben ausgelöst wird. Das Beispiel dort zeigt, wie man die Eingabe in einem Feld, aktuell - Buchstabe für Buchstabe in einem anderen anzeigen kann.
Sonst fällt dazu keine andere Verwendung ein - naja muss ja auch nicht sein.
Ich verwende übrigs deshalb das Exit-Ereignis, weil ich das neue Füllen der abhängigen Combobox nur ausführen will, wenn sich der Feldinhalt des führenden Feldes geändert hat. (deshalb kam ich ursprünglich auf die Idee, dass wohl Change dafür geeignet sei)
Merke mir also bei Enter den alten Wert, vergleiche bei Exit und wenn neuer Wert fülleich auch die abhängige Combobox damit der Anwender, wenn er den Defaultwert behalten will, mit der Maus gleich in das nächste Feld klicken kann.
Der User bin ich selbst - sonst würde ich es vielleicht für sicherer halten, daß der Anwender jedes Feld
durchläuft und dadurch den Inhalt bestätigt, damit nicht versehentlich ein Defaultwert stehen bleibt.
Soweit ist das Problem für mich jetzt gelöst.
Danke für Deinen Hinweis und Deine Geduld für meine Frage.
Gruß
Monika
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige