Öffnen in Formularansicht
DoCmd.OpenForm „NameFormular“, acNormal
Öffnen als Datenblatt
DoCmd.OpenForm „NameFormular“, acFormDS
Öffnen in Formularansicht
DoCmd.OpenForm „NameFormular“, acNormal
Öffnen als Datenblatt
DoCmd.OpenForm „NameFormular“, acFormDS
On Error GoTo Err_Kombinationsfeld37_DblClick
Dim lngProductID As Long
If IsNull(Me![Kombinationsfeld37]) Then
Me![Kombinationsfeld37].Text = „“
Else
lngProductID = Me![Kombinationsfeld37]
Me![Kombinationsfeld37] = Null
End If
DoCmd.OpenForm „Standorte“, acNormal, , , , acWindowNormal, „GotoNew“
Me!Kombinationsfeld37.Requery
If lngProductID <> 0 Then Me![Kombinationsfeld37] = lngProductID
Exit_Kombinationsfeld37_DblClick:
Exit Sub
Err_Kombinationsfeld37_DblClick:
MsgBox Err.Description
Resume Exit_Kombinationsfeld37_DblClick
Problem
Wenn Sie bei der Arbeit in Formularen aus Versehen das Mausrad betätigen, führt Access unkontrollierbare Datensatzwechsel aus. Das kann zum Beispiel dazu führen, dass neue oder geänderte Datensätze unvollständig gespeichert werden, Eingaben/ Änderungen in falschen Datensätzen erfolgen oder Datensätze „angesteuert“ werden können, die dem Anwender eigentlich verborgen bleiben sollten.
Leider lässt sich die Abfrage des Mausrades in Access weder ausschalten noch mit den vorhandenen Funktionen oder über Ereignisprozeduren unterdrücken, sodass viele Entwickler und Datenbank- Administratoren die Mausrad-Funktion in letzter Konsequenz entnervt über die Systemsteuerung ausschalten.
Lösung
Eine alternative Möglichkeit, hier Abhilfe zu schaffen, besteht darin, die für ein Access-Formular ausgelösten Ereignisse auf Systemebene zu filtern und das Ereignis „Mausrad“ nur für das betreffende Formular zu eliminieren. In anderen Fenstern kann das Mausrad wie gewohnt genutzt werden. Dazu ist eine Funktion notwendig, die quasi zwischen das Formular und das Betriebssystem geschaltet wird. Dieser Funktion werden zunächst alle von Windows an das Formular gesendeten Ereignisse übergeben; sie prüft sie und reagiert entsprechend, indem sie das Ereignis „Mausrad“ nicht an das Formular weitergibt, während alle anderen Ereignisse den Filter unverändert passieren.
Vom Grundsatz her kann eine solche Filterfunktion in VBA geschrieben und über eine API-Funktion initialisiert werden. Da sie aber kontinuierlich von Windows, beispielsweise bei Mausbewegungen oder Tastendrücken, aufgerufen wird, muss sie sich immer an der gleichen Speicheradresse befinden. Das ist im VBA-Speichermodell erst ab VBA 6.0/Access 2000 einigermaßen zuverlässig der Fall. In früheren VBA-Versionen können Funktionen im Speicher zum Beispiel durch Aufräumaktionen im Zeichenkettenbereich („Garbage Collection“) wandern, sodass unter Umständen mit einem Absturz von Access zu rechnen ist. Außerdem steht eine Funktion „AddressOf“ zur Ermittlung der Adresse einer Variablen, Prozedur oder Funktion erst ab VBA 6.0 zur Verfügung. Aber auch mit VBA 6.0 bzw. Access 2000/2002/2003 ist der Einsatz einer Filterfunktion für Ereignisse nicht ganz unproblematisch.
Wenn die VBA-Entwicklungsumgebung geöffnet wird, läuft eine rein in VBA realisierte Lösung nicht mehr verlässlich und kann schlimmstenfalls auch zum Absturz von Access führen. Um sicherzustellen, dass die Filterfunktion sich immer an einer festen Adresse befindet und korrekt aufgerufen werden kann, empfiehlt sich die Auslagerung als Klasse in eine externe DLL, die dann über das Menü EXTRAS-VERWEISE referenziert wird. Diese DLL wird unabhängig von Access in einen geschützten Speicherbereich geladen und verbleibt unberührt von den Aktionen in Access immer an einer festen Speicheradresse. Microsoft beschreibt eine solche Lösung im Knowledge-Base-Artikel „Q278379“. Da aber die wenigstens Access-Anwender in der Lage sind, eine solche DLL zu erstellen, haben wir sie für Sie vorbereitet. Um diese DLL bzw. die darauf basierende Lösung zur Unterdrückung des Mausrades in Ihren Datenbanken zu nutzen, gehen Sie wie folgt vor:
1. Starten Sie Access und öffnen Sie die Datenbank mit den Formularen, in denen das Mausrad unterdrückt werden soll.
2. Öffnen Sie das betreffende Formular im Entwurfsmodus und wählen Sie das Menü ANSICHT-CODE an, um den VBA-Editor zu starten.
3. Wählen Sie das Menü EXTRAS-VERWEISE an, klicken Sie auf die Schaltfläche DURCHSUCHEN, stellen Sie als „Dateityp“ den Eintrag „Ausführbare Dateien (*.EXE, .DLL)“ beziehungsweise „Klassenbibliotheken (*.OLB, *.TLB, *.DLL)“ ein, lokalisieren Sie die Datei „MouseWheel.dll“ im Windows- Systemverzeichnis und übernehmen Sie sie per Doppelklick.
4. In der Liste „Verfügbare Referenzen“ finden Sie nun einen aktivierten Eintrag „Access-Berater MouseWheel DLL“. Übernehmen Sie die Einbindung mit einem Klick auf die Schaltfläche OK.
5. Geben Sie im allgemeinen Teil des Formularmoduls die folgende Deklaration und die folgende Prozedur ein (oder kopieren Sie die Zeilen aus dem Formular „Kunden/MouseWheel“ der Beispieldatenbank):
Private WithEvents
clsMouseWheel
As MouseWheel.CMouseWheel
Private Sub
clsMouseWheel_MouseWheel
(Cancel As Integer)
Beep
Cancel = True
End Sub
6. Verlassen Sie nun zunächst die VBAEntwicklungsumgebung und wählen Sie das Menü ANSICHT-EIGENSCHAFTEN an, um das Eigenschaftenfenster für das Formular anzeigen zu lassen.
7. Stellen Sie die Eigenschaft „Bei Laden“ auf den Eintrag „[Ereignisprozedur]“, klicken Sie auf die Schaltfläche mit den drei Punkten und geben Sie die folgenden Anweisungen im VBA-Editor ein:
Private Sub Form_Load()
Set clsMouseWheel
= New MouseWheel.CMouseWheel
Set clsMouseWheel.Form = Me
clsMouseWheel.SubClassHook-
Form
End Sub
Wenn Sie in „Form_Load“ bereits eigene Anweisungen untergebracht haben, setzen Sie die drei oben gezeigten Zeilen an den Anfang der Ereignisprozedur.
8. Stellen Sie die Eigenschaft „Bei Schließen“ auf den Eintrag „[Ereignisprozedur]“ ein, klicken Sie auf die Schaltfläche mit den drei Punkten und geben Sie die folgenden Anweisungen im VBA-Editor ein:
Private Sub Form_Close()
clsMouseWheel.SubClassUnHook-
Form
Set clsMouseWheel.Form
= Nothing
Set clsMouseWheel = Nothing
End Sub
Wenn Sie in „Form_Close“ bereits eigene Anweisungen untergebracht haben, setzen Sie die drei oben gezeigten Zeilen an das Ende der Ereignisprozedur. Wenn Sie nun das Formular über ANSICHT- FORMULARMODUS anzeigen lassen und das Mausrad betätigen, hören Sie lediglich einen akustischen Hinweis, es werden aber keine Datensatzwechsel mehr ausgeführt. In der DLL befindet sich die Funktion „Window- Proc“, die für die Filterung zuständig ist. Zwei weitere Funktionen „SubClassHookForm“ und „SubClassUnHook- Form“ aktivieren die Filterfunktion beim Laden des Formulars bzw. heben diesen Zustand wieder auf. Ist die Funktion aktiviert, schickt das Betriebssystem alle Ereignisse für das Formular zunächst an die Funktion „WindowProc“ in der DLL. Diese prüft auf das Ereignis „WM_Mouse- Wheel“. Tritt es auf, wird die benutzerdefinierte Ereignisprozedur „clsMouse- Wheel.MouseWheel“ im Formular aufgerufen. Über den Parameter „Cancel“ beziehungsweise die Zuweisung „= True“ veranlassen wir dort nach einem akustischen Hinweis, dass das Ereignis unterdrückt wird. Alternativ können Sie hier eine Meldung wie „Mausrad wird nicht unterstützt…“ anzeigen lassen oder „Beep“ weglassen, um das Ereignis stillschweigend unter den Tisch fallen zu lassen.
Die 1 hat die Bedeutung, wie oft das Macro starten soll
DoCmd.RunMacro „Macroname“, 1
Access bietet zwar bereits eine Funktion für Sicherheitsabfragen vor dem Löschen von Datensätzen an, aber in der Praxis zeigt sich, dass diese Abfrage häufig nicht ausreichend ist. So sollten zur Optimierung der Benutzerfreundlichkeit häufig zusätzliche Informationen angezeigt werden oder spezielle Reaktionen erfolgen.
In diesem Tipp zeigen wir Ihnen, wie Sie beliebige eigene Sicherheitsabfragen für das Löschen von Datensätzen in Formulare integrieren und dann gezielt auf die jeweilige Antwort des Anwenders reagieren können.
Wenn dem Anwender vor dem Löschen von Datensätzen eine Sicherheitsabfrage angezeigt werden soll, können Sie bekanntlich eine entsprechende Access interne Abfrage benutzen. Wenn der Anwender einen oder mehrere Datensätze löscht, zeigt Access eine Rückfrage an, die mit einem Klick auf JA oder NEIN zu beantworten ist. Das Aktivieren dieser Abfrage hat den Vorteil, dass unbeabsichtigtes oder unüberlegtes Löschen vermieden wird.
Der Nachteil besteht darin, dass Access nun bei jedem Objekt, das gelöscht werden soll, eine solche Sicherheitsabfrage anzeigt und so bei der Entwicklung neuer und der Verwaltung vorhandener Objekte etwas bremsend wirkt. Allerdings lässt sich die interne Sicherheitsabfrage ausschalten und für Formulare eine eigene Sicherheitsabfrage realisieren. Das hat dann wiederum den Vor teil, dass man eigene Texte und Hin weise verwenden kann.
Die beste Lösung besteht darin, eine Schaltfläche LÖSCHEN in das betreffende Formular aufzunehmen. Das ist zwar nicht unbedingt notwendig, da auch die entsprechenden Befehle aus dem Menü BEARBEITEN benutzt werden könnten, aber über eine Schaltfläche können Sie ein Makro aufrufen, das beide Befehle – DATENSATZ MARKIEREN und LÖSCHEN – zusammenfasst und so dem Anwender etwas mehr Komfort bei der Arbeit mit Ihren Datenbanken bietet.
Dazu erstellen Sie im ersten Schritt ein Makro „DS Löschen“ oder importieren das von uns vorbereitete Makro aus unserer Beispieldatenbank. Gehen Sie dann für den Import folgendermaßen vor:
In Access 2007 wechseln Sie in der Multifunktionsleiste auf die Registerkarte „Externe Daten“ und klicken in der Gruppe „Importieren“ auf die Schaltfläche ACCESS. Lokalisieren Sie im nachfolgenden Dialog per DURCH SUCHEN die Beispieldatenbank, aktivieren Sie die Option IMPOR TIE – REN SIE TABELLEN, ABFRAGEN, FORMULARE… IN DIE AKTUELLE DATEN BANK und klicken Sie auf OK. Markieren Sie danach das Makro, klicken Sie auf OK und bestätigen Sie die Abschlussmeldung mit SCHLIEßEN.
Legen Sie nun im Formular eine Schaltfläche „Löschen“ an und weisen Sie dieser Schaltfläche in der Eigenschaft „Beim Klicken“ das Makro „DS Löschen“ zu.
Ein Formular stellt die Ereignisse „Beim Löschen“, „Vor Löschbestätigung“ und „Nach Löschbestätigung“ zur Verfügung. In den dazugehörigen Ereignisprozeduren lassen sich eigene Abfragen realisieren. Die Ereignisprozeduren verfügen dazu über einen Parameter „Cancel“, den Access nach Aufruf der Prozedur prüft. Steht „Cancel“ auf „True“, so bricht Access den Löschvorgang ab. Der einfachste Weg ist der, eine kleine Meldung anzuzeigen. Klickt der Anwender auf NEIN, wird der Parameter „Cancel“ entsprechend gesetzt, sodass Access keine Löschung vornimmt.
Stellen Sie die Eigenschaft „Vor Löschbestätigung“ auf den Eintrag „[Ereignisprozedur]“ und klicken Sie dann auf die Schaltfläche mit den drei kleinen Punkten.
Hier geben Sie nun folgende Anweisungen ein:
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Dim R As Variant
Beep
R = MsgBox(„Datensatz wirklich löschen?“, vbYesNo + vbQuestion, „Löschen:“)
If R = vbNo Then
Cancel = True ‚Nicht löschen
Exit Sub
End If
End Sub
Diese kleine Routine zeigt die Frage „Datensatz wirklich löschen?“ mit einer JA- und einer NEIN-Schaltfläche an. Das Ergebnis, also die Nummer der angeklickten Schaltfläche, wird der Variablen „R“ zugewiesen.
Ist auf die Schaltfläche NEIN geklickt worden, so setzen wir „Cancel“ auf „True“ und verlassen die Prozedur. Andernfalls läuft die Routine weiter durch, „Cancel“ bleibt auf „False“ stehen und Access löscht den Datensatz.
In der Meldung können Sie nun zusätzliche spezifische Hinweise wie beispielsweise „Bitte daran denken, die Kundenadresse auch in der Datenbank ‘XYZ’ zu löschen!“ unterbringen oder die Routine um eigene Anweisungen erweitern, die gegebenenfalls im Falle einer Löschung ausgeführt werden sollen:
Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Dim R As Variant
Beep
R = MsgBox(„Datensatz wirklich löschen?“, vbYesNo + vbQuestion, „Löschen:“)
If R = vbNo Then
Cancel = True ‘Nicht löschen
Exit Sub
End If
DoCmd OpenReport „Kundenliste“, A_Normal ‘Aktuelle Kundenliste drucken
End Sub
Hier wird zum Beispiel ein Bericht geöffnet, der nach der Löschung die aktualisierte Kundenliste ausdruckt.
Modul: modSubs
Zur besseren Übersicht empfiehlt es sich, bei neu eingefügten Datensätzen die Felder, die noch leer sind, farblich hervorheben zu lassen. Dazu nutzen Sie die bedingte Formatierung wie folgt:
Zukünftig werden alle Felder, für die noch keine Informationen erfasst wurden, beispielsweise mit rotem Hintergrund angezeigt und es ist sofort erkennbar, dass hier noch Eingaben fehlen.
Sicherlich haben auch Sie bereits häufig Kombinationsfelder auf Ihren Formularen eingesetzt. Gedacht als sinnvolle Eingabehilfe, können sie die Auswahl von Adressen, Bestellvorgängen, Kategorien, Suchkriterien und ähnlichen Informationen wesentlich beschleunigen. In der Praxis zeigt sich allerdings sehr schnell, dass ein Kombinationsfeld alleine noch kein Garant für komfortable Bedienung ist. Vor allem bei einer zu großen Anzahl von Einträgen geht die Übersicht verloren und Access büßt deutlich an Geschwindigkeit ein.
Sie können den Bedienungskomfort Ihrer Datenbanken daher deutlich verbessern, wenn Sie Möglichkeiten schaffen, den Inhalt des Kombinationsfeldes nach bestimmten Kriterien einzuschränken. Also beispielsweise:
— Es werden nur Artikel aus ganz bestimmten Kategorien angezeigt.
— Sie listen nicht alle Bestellungen auf, sondern lediglich diejenigen, die in ein bestimmtes Land oder eine Stadt verschickt wurden.
— Sie beschränken die Liste der Gesamtbestellungen auf die Vorgänge, die mit zwei ganz bestimmten Nummern beginnen.
Da es viele verschiedene Anwendungsmöglichkeiten für Kombinationsfelder gibt, sind auch unterschiedliche Lösungsansätze notwendig, um die angebotenen Einträge auf Grundlage bestimmter Kriterien einzuschränken. Im Folgenden möchten wir Ihnen daher zwei besonders interessante Techniken vorstellen, die Sie ganz nach Bedarf in Ihren eigenen Anwendungen einsetzen können.
Tipp 1: Kombinationsfelder verknüpfen
Eine besonders beliebte Lösung für mehr Übersicht ist der Einsatz eines zweiten Kombinationsfeldes mit einer übergeordneten Kategorie. Sie machen also den Inhalt eines Kombinationsfeldes davon abhängig, welcher Eintrag in einem anderen Kombinationsfeld ausgewählt wurde.
In unserem ersten Beispiel arbeiten wir mit einem Kombinationsfeld zur Artikelauswahl. Da die Gesamtliste zu umfangreich ist, gibt es zusätzlich ein Feld KATEGORIE. um die angezeigten Artikel einzuschränken:
1. Öffnen Sie das Formular „frmKombi- Felder1“.
2. Markieren Sie einen beliebigen Eintrag im Kombinationsfeld KATEGORIE
3. Wenn Sie nun das Kombinationsfeld ARTIKEL öffnen, werden nur Einträge angezeigt, die zu der gewählten Kategorie gehören.
Die Funktionsweise ist schnell erklärt: Zunächst einmal wird das Kombinationsfeld KATEGORIE mithilfe der folgenden SQL-Abfrage
Select [Kategorie-Nr], [Kategoriename] From [Kategorien];
mit der Nummer und den Namen aller vorhandenen Kategorien gefüllt. Wichtig dabei ist, dass die Kategorienummer durch das Setzen der Spaltenbreite auf 0 cm komplett ausgeblendet wird. Schließlich ist nur der Name für die Auswahl im Kombinationsfeld interessant; aber die Nummer ist der eindeutige Schlüssel, über den eine Auswahl der entsprechenden Artikel erfolgen kann. Die Eigenschaft „Gebundene Spalte“ haben wir auf „1“ gesetzt; Access liefert also als Ergebnis den Inhalt der ersten Spalte in der markierten Zeile und dabei handelt es sich dann um die ausgeblendete Kategorienummer.
Dieses Ergebnis können Sie sich zunutze machen, um auf dieser Grundlage die zugehörigen Artikel auszuwählen. Dementsprechend sieht die Datensatzherkunft für das Kombinationsfeld ARTIKEL folgendermaßen aus:
Ausgewählt werden also Name und Nummer der Artikel, deren Kategorienummer der im Kombinationsfeld „cboKategorie“ entspricht. Der entsprechende Bezug sieht folgendermaßen aus:
[Formulare]![frmKombiFelder1]! [cboKategorie]
Zu guter Letzt müssen Sie noch sicherstellen, dass die Datensatzherkunft des zweiten Kombinationsfeldes automatisch aktualisiert wird, sobald eine neue Kategorie gewählt wurde.
Dem Ereignis „Nach Aktualisierung“ wurde daher die folgende Prozedur zugewiesen:
Private Sub cboKategorie_AfterUpdate()
cboArtikel.Requery
End Sub
Die Übertragung dieser Technik auf Ihre Datenbanken ist mit vier Schritten möglich:
1. Ausgangspunkt sind zwei Tabellen, die über ein eindeutiges Feld – wie in diesem Fall die Kategorienummer – miteinander verknüpft sind.
2. Das erste Kombinationsfeld, das den Inhalt des zweiten Feldes steuern soll, füllen Sie mit einer Liste der möglichen Kriterien, wobei Sie als Ergebnis immer das Verknüpfungsfeld zurückliefern müssen.
3. Weisen Sie dem Ereignis „Nach Aktualisierung“ des ersten Kombinationsfeldes eine Ereignisprozedur zu, die das zweite Kombinationsfeld aktualisiert (Requery-Methode).
4. Nun definieren Sie die Datenherkunft des zweiten Kombinationsfeldes so, dass der Inhalt des ersten Feldes als Kriterium zur Auswahl der angezeigten Datensätze verwendet wird.
Tipp 2: Kriterien über Optionsfelder festlegen
Immer dann, wenn Sie mit wenigen klar einzugrenzenden Kriterien arbeiten, können Sie ein Kombinationsfeld besonders schnell über Optionsfelder einschränken: Der Inhalt der Liste richtet sich danach, welche Option angeklickt wurde. Ein entsprechendes Beispiel zeigt das Formular „frmKombiFelder2“.
Klicken Sie einen beliebigen Versender an und öffnen Sie dann das Kombinationsfeld BESTELLUNGEN: Je nachdem, welche Option Sie aktiviert haben, werden jeweils die Bestellungen angezeigt, die über den entsprechenden Versender verschickt wurden.
Sie benötigen lediglich eine einzige VBA-Prozedur, um diesen Effekt zu erzielen. Sie ist dem Ereignis „Nach Aktualisierung“ der Optionsgruppe zugeordnet und sieht wie in „Listing 1“ beschrieben aus.
Die Optionsgruppe „ogrpVersender“ liefert einen Wert zwischen 1 und 4, der jeweils dem aktivierten Optionsfeld entspricht. Abhängig von dem Ergebnis, wird der Datensatzherkunft des Kombinationsfeldes eine entsprechende SQL-Zeichenkette zugewiesen.
Zusätzlich verwenden wir in dem Beispiel noch eine Prozedur, die automatisch beim Öffnen des Formulars die erste Option aktiviert:
Private Sub Form_Open(Cancel As Integer)
ogrpVersender.Value = 1
End Sub
Wenn Sie auch in Ihren eigenen Datenbanken Optionsfelder zur Einschränkung der Kombinationsfeld-Liste einsetzen möchten, erstellen Sie eine Prozedur nach der oben gezeigten Struktur. Die Select- Case-Konstruktion ist dabei die einfachste Möglichkeit, um die einzelnen Werte abzufragen und abhängig vom Ergebnis eine entsprechende Datensatzherkunft festzulegen.
Außerdem müssen Sie einige Eigenschaften des Kombinationsfeldes manuell festlegen: Spaltenbreiten, gebundene Spalten, Spaltenanzahl etc. werden von der Prozedur nicht verändert, weil sie immer gleich bleiben.
Listing 1
Private Sub ogrpVersender_AfterUpdate()
Select Case ogrpVersender
Case 1
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen;“
Case 2
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen WHERE Versandfirma = 1;“
Case 3
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen WHERE Versandfirma = 2;“
Case 4
cbBestellungen.RowSource = „SELECT [Bestell-Nr], Empfänger, Bestimmungsland FROM Bestellungen WHERE Versandfirma = 3;“
End Select
End Sub
Anrede = Suchfeld.[Column](1)
Vorname = Suchfeld.[Column](2)
Straße = Suchfeld.[Column](3)
Plz = Suchfeld.[Column](4)
Ort = Suchfeld.[Column](5)
Frage:
In einem Formular sind verschiedene Kombinationsfelder vorhanden. Sobald ein Feld den Fokus erhält, soll sich sofort das Auswahlmenü öffnen, ohne dass ich extra auf den Pfeil klicken muss. Welche Einstellungen sind dafür vorzunehmen?
Antwort: Dafür benötigen Sie VBA-Unterstützung:
In Zukunft wird bei Aktivierung eines Kombinationsfeldes die Funktion „AutoDropDown“ aufgerufen, die wiederum für das Kombinationsfeld die Methode „Drop Down“ aufruft und damit die Auswahlliste öffnet. Sie können mit den Cursor– Tasten einen Eintrag auswählen und die Return-Taste drücken – es wird zum nächsten Feld gewechselt und dort ggf. die nächste Auswahlliste automatisch aufgeklappt.
Frage:
Wenn man ein Kombinationsfeld in einem Formular anwählt, passiert standardmäßig zunächst einmal gar nichts. Ich muss die Liste erst per Mausklick oder Tastenkombination Alt+Cursor Unten öffnen, um dann einen Eintrag auswählen zu können. Gibt es eine Einstellung, mit der ein Kombinationsfeld automatisch geöffnet wird, sobald es den Fokus erhält?
Antwort:
Eine entsprechende Einstellung dafür gibt es nicht, aber Sie können die Dropdown-Methode ausführen, sobald das gewünschte Ereignis (Kombinationsfeld hat den Fokus) eingetreten ist:
1. Öffnen Sie das Formular mit dem gewünschten Kombinationsfeld im Entwurfsmodus.
2. Markieren Sie die Eigenschaft „Bei Fokuserhalt“ und klicken Sie auf die Schaltfläche mit den drei Punkten.
3. Im nachfolgenden Dialogfeld klicken Sie zweimal auf „Code-Editor“. Zwischen den vorgegebenen „Sub“- und „End Sub“-Zeilen ergänzen Sie eine Zeile in der folgenden Form:
Me!<Kombinationsfeld>.Dropdown
Ersetzen Sie dabei den Parameter <Kombinationsfeld> durch den Namen des Steuerelements, das geöffnet werden soll.
Die Prozedur für ein Kombinationsfeld mit dem Namen „Kategorie“ sieht dann z.B. folgendermaßen aus:
Private Sub Kategorie_GotFocus()
Me!Kategorie.Dropdown
End Sub
4. Verlassen Sie den VBA-Editor, sichern Sie die Änderungen und wechseln Sie wieder in die Formularansicht.
5. Wenn Sie nun das Kombinationsfeld anwählen, wird es automatisch aufgeklappt, sodass Sie sofort einen Listeneintrag auswählen können.