Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Wert in Kombinationsfeld zur Laufzeit einstellen

Begonnen von compinaut, Januar 21, 2016, 09:36:57

⏪ vorheriges - nächstes ⏩

compinaut

Hallo,
ich hätte eine Frage:
Ich möchte gerne mit einer Schaltfläche den ausgewählten Wert in einem Kombinationsfeld auf den nächsten möglichen Wert verschieben. Leider finde ich dazu keine Eigenschaft, die dies zur Laufzeit erlauben würde.
Kennt jemand vielleicht eine Möglichkeit?
Gruß
compinaut

MzKlMu

Gruß Klaus

compinaut

Hallo MzKlMu,

ich habe einen Kalender programmiert, mit dem man ein Datum auswählen kann. Das funktioniert auch prima. Jedoch möchte ich nun gerne mit einer Schaltfläche z.B. auf den nächsten oder vorherigen Monat in der Liste des Kombinationsfeldes wechseln, ohne das man das Steuerelement aufmachen muss (wie bei der Datumsauswahl bei Outlook-Aufgaben).

Gruß
compinaut

MzKlMu

Hallo,
zeige bitte mal den SQL Code der Abfrage für das Kombi.
Gruß Klaus

compinaut

Hinter dem Kombinationsfeld liegt keine Abfrage sondern eine Werteliste, weil die Liste ja feststeht (die Monate). Es werden also immer alle 12 Monate in der Liste angezeigt.

MzKlMu

Hallo,
werden die Monate als Text oder als Zahl dargestellt ?
Und wo kommt das Jahr her ?

Wenn Du einen Kalender programmiert hast, hast Du doch eine Tabelle mit allen Tagen, diese Tabelle kannst Du auch für das Kombi verwenden. Du musst nur ein entsprechendes Format einstellen und die Daten einschränken.

Kannst Du das ganze Vorhaben mal etwas genauer darstellen ?
Was wird denn angezeigt nach Auswahl mit dem Kombi ?
Der Monat in einem Endlosformular ?

PS:
Wertlisten aller Art halte ich für verzichtbar. Verwende immer eine Tabelle.
Gruß Klaus

compinaut

Die Monate sind als Text im Kombinationsfeld angegeben. Das Jahr ist in einem gesonderten Kombinationsfeld erfasst und die Jahreszahlen werden per VBA während des Öffnens des Formulars in die Datenquelle eingetragen (bei einer Tabelle als Quelle müsste ich ja zunächst auf Vorhandensein einer Tabelle prüfen und die Tabelle jedes mal neu befüllen, weil das Formular ja auch mehrere Jahre hinweg lauffähig und aktuell sein muss - das war mir ehrlich gesagt zu aufwändig). Die Tage werden per VBA in 42 ungebundene Textfelder eingetragen (also nicht aus einer Tabelle übernommen, weil sich die Aufteilung der Tage auf die Wochentage jeden Monat und für jedes Jahr ändern). Es sieht ungefähr so aus wie das Kalendersteuerelement bei den Outlook-Aufgaben. Nach Auswahl des Monats und/oder des Jahres werden die Tagesfelder neu berechnet. Ich habe auch mal probiert, den Monat über "Me![lstMonat].Selected(4) = True" einzustellen. Der Fokus wechselt zwar auf das Kombinationsfeld, aber es wird nicht der genannte Monat (hier: Mai) ausgewählt.

compinaut

Ich füge als Anhang mal einen Screenshot bei.

Mit den Pfeilen oben rechts und links soll man zum nächsten Monat bzw. zum nächsten Jahr (bei Januar oder Dezember) wechseln können. Das linke Kombinationsfeld enthält den Monat und das rechte das Jahr.
Ganz rechts außen kann man noch eine Uhrzeit auswählen (um dem Kunden einen Termin incl. Uhrzeit mitteilen zu können).

Alles funktioniert einwandfrei bis auf die Schaltflächen mit den Pfeilen. Ich muss also immer die Liste aufmachen und den Monat und das Jahr auswählen. Dies würde ich gerne vereinfachen, so ungefähr wie das bei Outlook (bei den Aufgaben) auch geht.

MaggieMay

Hallo,

du kannst die Liste in einer Schleife durchlaufen und bei Übereinstimmung des Listenwertes mit dem Wert des Kombinationsfeldes den Index um 1 erhöhen und den Eintrag selektieren.

Schau dir dazu die Eigenschaften eines Kombifeldes in der Access-Hilfe an und ein paar Codebeispiele, dann sollte die Lösung zu finden sein. Wenn du fertigen Code serviert haben möchtest, meldest du dich einfach noch einmal.

BTW:
Die Lösung ist unabhängig von der Art des Herkunftstyps, d.h. Werteliste, Tabelle oder Abfrage.
Freundliche Grüße
MaggieMay

compinaut

Herzlichen Dank schon einmal für die Hilfe.

Mit dem Selektieren eines Wertes habe ich es schon versucht. Das ging leider nicht. Bei donkarl.com bin ich schon einmal einen Schritt weiter gekommen. Mit

varAusgewählterMonat = Me("lstMonat").ListIndex
   
Me("lstMonat") = Me![lstMonat].ItemData(varAusgewählterMonat - 1)

kann ich z.B. einen vorhergehenden Monat auswählen. Der neue Monat steht jetzt im Kombinationsfeld. Soweit so gut. Aber das Ereignis "Nach Aktualisierung" wird nicht angestoßen, so dass die Tagesfelder nicht aktualisiert werden. Welches Ereignis könnte ich vielleicht sonst noch benutzen?

DF6GL

Hallo,

warum soll denn eigentlich das Auswahl-Kombi eingestellt werden?

ZitatAber das Ereignis "Nach Aktualisierung" wird nicht angestoßen, so dass die Tagesfelder nicht aktualisiert werden. Welches Ereignis könnte ich vielleicht sonst noch benutzen?

Dann ruf doch diese Sub nach dem Einstellen des Kombis auf.....

Me("lstMonat") = Me![lstMonat].ItemData(varAusgewählterMonat - 1) 
call lstMonat_Afterupdate()


Redest Du hier von einem Listenfeld oder von einem Kombifeld?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

compinaut

Herzlichen Dank nochmals an alle.

Nun klappt alles. Ich rufe jetzt die Ereignisprozedur wie vorgeschlagen auf und auch die Tagesfelder werden aktualisiert.

Super.