Dropdown nach OpenForm

Liebe/-r Experte/-in,

nachdem mir im Forum keiner helfen konnte, wende ich mich nun an die Experten…

Ich habe nach der Umstellung von ACC03 auf ACC10 ein Problem mit einem Formular.
Ein Kombinationsfeld soll direkt nach dem Öffnen des Formulars aufgeklappt werden.
Unter ACC03 funktionierte das mit nachfolgendem Code einwandfrei:

‘***************************************
Private Sub Form_Open(Cancel As Integer)
On Error GoTo err_Form_Open

Me!Auswahl_Name.SetFocus
Me!Auswahl_Name.Dropdown

exit_Form_Open:
Exit Sub

err_Form_Open:
MsgBox Err.Description
Resume exit_Form_Open
End Sub
‘***************************************

Unter ACC10 funktioniert das nicht mehr.
Wenn ich den Code schrittweise ausführe, bleibt das Formular solange unsichtbar, bis der ganze Code durchlaufen ist. Man sieht dann bei der Zeile „Me!Auswahl_Name.Dropdown” das geöffnete Kombinationsfeld, jedoch ohne das Formular. Im nächsten Schritt wird dann das Formular eingeblendet und das aufgeklappte Kombifeld ist natürlich wieder zu.

Wo muss ich die Routine denn platzieren, damit sie funktioniert. Hab schon alles Mögliche versucht (bei Focuserhalt, beim Anzeigen, bei Aktivierung, etc.)

Vielen Dank.

Gruß
Uli

Tut mir Leid, habe nur Acc 2007 und kann daher nicht helfen. (Das Ergebnis interessiert mich aber auch.)

Gruß
Tronicrot

Hallo Uli,
beim Open-Ereinis geht es tatsächlich nicht.
Aber beim Anzeigen (Current):
me.feld.setfocus
me.feld.dropdown

Gruß Udo

Hallo Uli,

leider funktioniert das irgendwie nicht mehr richtig bei Access 2010. Es gibt aber ein Workaround mit dem TimerEvent.
Bei Form_Load stellst du Me.TimerInterval =1
Bei Form_Timer setzt du zunächst das Zeitinterval wieder auf = 0 damit es nur einmal ausgeführt wird. Dann das mit SetFocus und DropDown.
Nach dem alle Events abgearbeitet wurden kommt erst das TimerEvent.
Viele Grüße
Özhan

Hallo Uli,

leider funktioniert das irgendwie nicht mehr richtig bei Access 2010. Es gibt aber ein Workaround mit dem TimerEvent.
Bei Form_Load stellst du Me.TimerInterval =1
Bei Form_Timer setzt du zunächst das Zeitinterval wieder auf = 0 damit es nur einmal ausgeführt wird. Dann das mit SetFocus und DropDown.
Nach dem alle Events abgearbeitet wurden kommt erst das TimerEvent.
Viele Grüße
Özhan.

Hallo Uli

Du hast Recht, sehr merkwürdiges Verhalten (übrigens auch in Access 13). Der Dropdown Befehl funktioniert nur wenn der SetFocus ab einem Befehlsfeld gesetzt wird oder wenn mit Tab-Taste vom vorhergehenden Feld in das Auswahlfeld gesprungen wird.

Als schnellen Workaround kann ich dir nur vorschlagen als erstes Feld im Formular ein Befehlsfeld zu erstellen und die beiden Zeilen dort „beim Klicken“ einzusetzen dann kommst du mit Enter zum gewünschten Resultat. Ich bleibe dran und teste noch weiter

freundliche Grüsse

Fonti46

Grüß Gott,

nachdem mir im Forum keiner helfen konnte, wende ich mich nun an die Experten…

nur Geduld…

Ich habe nach der Umstellung von ACC03 auf ACC10 ein Problem
mit einem Formular.

d.h. die Datei wurde „konvertiert“ oder der Inhalt in eine leere neue ACCDB kopiert?

Ein Kombinationsfeld soll direkt nach dem Öffnen des Formulars aufgeklappt werden.

ok, NACH dem Öffnen! also beim Anzeigen!

Unter ACC03 funktionierte das mit nachfolgendem Code
einwandfrei:

hey, das war vor 13 Jahren…was erwartest du?

Unter ACC10 funktioniert das nicht mehr.

nun ja, es sich einige „Ereignisse“ hinzugekommen.
das „beim Öffnen“ Ergeignis ist nicht der richtige Ort dafür (aber das hst du ja schon festgetellt)

Wenn ich den Code schrittweise ausführe, bleibt das Formular
solange unsichtbar, bis der ganze Code durchlaufen ist.

genau, es könnte ja sein, dass man ein Hinweisfenster einblenden will, oder einige Felder sperren/freigeben möchte…usw.

Man
sieht dann bei der Zeile „Me!Auswahl_Name.Dropdown” das
geöffnete Kombinationsfeld, jedoch ohne das Formular. Im
nächsten Schritt wird dann das Formular eingeblendet und das aufgeklappte Kombifeld ist natürlich wieder zu.

logisch, weil du mit deiner aktion zu schnell warst.

Wo muss ich die Routine denn platzieren, damit sie
funktioniert. Hab schon alles Mögliche versucht (bei
Focuserhalt, beim Anzeigen, bei Aktivierung, etc.)

beim Ereignis „beim Anzeigen“ sollte es auf jeden Fall funktionieren.
Falls nicht, liegt der Fehler in deinem Code den du vorher ausführst (ich habe im Forum nachgelesen).

Grüße aus München
Wolfgang(Netwolf)

Hallo Uli,

setze statt der Zeile dropdown folgendes ein (ist eigentlich ein Excel-Trick)
SendKeys ("%{DOWN}")
Bei mir gehts!
Grüße aus Nürnberg

Hallo Ulli,

Dein Problem ist ein von Microsoft Hausgemachtes, da in jedem Fall der Focus von Deinem Formular kurzfristig wieder an die VBA-Rutine geht.
Um Das Formular wieder mit einem geöffneten PullDown anzuzeigen, musst Du das Aufklappen in die Aufruf-Rutine verlagern.
Mal angenommen, Du hast ein Formular mit dem Namen ST und von da aus wird Dein Formular F1 geöffnet und das PullDown ‚KB1‘ ausgeklappt, dann brauchst Du in der Rutine, die Dein Formular öffnet, die Zeilen :

…
 DoCmd.OpenForm "F1"
 ' folgenden Zeilen nur, wenn ST geschlossen warden soll
 If Forms("ST").Dirty Then Forms("ST").Dirty = False
 DoCmd.Close acForm, "ST"

 Forms("F1").KB1.SetFocus
 Forms("F1").KB1.Dropdown
End Sub

Auf diese Weise öffnest Du das PullDown erst, wenn alle Events für Formular F1 abgeschlossen sind und der Focus wandert dann automatisch auf F1.

Ich hoffe, das klappt bei Dir so ^^
Burkhard

Hallo,

habe das ganze mal ausprobiert und muss leider zugeben, das ich dir keine Loesung anbieten kann.
Anscheinden hat MS da irgendwas mit der Funktionsreihenfolge beim Erzeugen eines Formulars geaendert.

Die einzige Idee, das Problem zu umgehen, waere das Starten eines Timers (zb. 1000ms) in der Routine BeimAnzeigen, um dann Sicherzugehen, das die Darstellung des Formulars abgeschlossen ist.
Um dann im Timer-Event die Box aufzuklappen.

Tschau
Peter

Vielen Dank für die Antwort.

Ich habe zwei Antworten erhalten, die funktionieren.

  1. Statt dropdown - SendKeys ("%{DOWN}")
  2. Bei Form_Load Me.TimerInterval =1; Bei Form_Timer das Zeitinterval wieder auf = 0. Dann das mit SetFocus und DropDown.

Gruß
Uli

Hallo Udo,

das funktioniert leider nicht.
Problem hat sich aber erledigt.
Danke nochmal.

Gruß
Uli

Hallo Özhan,

funktioniert einwandfrei.
Vielen Dank.

Gruß
Uli

Hallo Fonti46,

vielen Dank.

Gruß
Uli

Hallo Wolfgang,

vielen Dank für Deine Antwort.

Gruß
Uli

Hallo Hans-Jürgen,

funktioniert einwandfrei.
Vielen Dank.

Gruß
Uli

Hallo Burkhard,

ich habe das jetzt mit „sendkeys…“ gelöst, das funktioniert.
Vielen Dank.

Gruß
Uli

Hallo Peter,

das mit dem Timer funktioniert auch.
Ich habe es jetzt mit „Sendkeys…“ statt „dropdown“ gelöst.
Vielen Dank.

Gruß
Uli

Hallo Uli
ich wollte das zunächst nicht glauben, aber es ist wirklich so wie Du schreibst.
Auch in Fachlektüren wird das so angegeben.

Ich habe die verschiedenen Ereignisse gecheckt und es wird nicht mehr das Dropdown Element geöffnet.

Die Reihenfolge der Ereignisse beim Öffnen sind:
Open ==> Load ==> Resize ==> Activate ==> gotFocus==> Current.
Beim Schließen: Unload ==> LostFocus ==> Deactivate ==> Close.

Ich werde nochmals im Kollegenkreis nachfragen, ob jemand dafür eine Lösung hat und melde mich dann nochmals.

Gruß Reinold
IT-Trainer und DB-Entwicklung

Hallo Uli

Bei mir funzt es wiefolgt:

  1. Ereignis „Beim Hingehen“
  2. Code: Me.cboName.DropDown

Beim wechseln auf die Kombiliste öffnet sich das Feld.

Version: Access 2010

Liebe Grüsse, Henri.