Ich habe also 6 Abfragen und möchte sie alle einmal am Ende jedes Monats ausführen. (Ich kenne mich ein wenig mit SQL aus, aber sie werden einfach mithilfe der Entwurfsansicht von Access erstellt.) In den nächsten Tagen werde ich also vielleicht die 6 Abfragen für Mai ausführen, da der Mai gerade zu Ende gegangen ist. Ich möchte nur die Daten des gerade zu Ende gegangenen Monats, daher ist in der Abfrage das Kriterium als Monatsname festgelegt (z. B. Mai). Es ist zwar nicht sehr zeitaufwändig, diese jeden Monat alle zu ändern, aber gibt es eine Möglichkeit, dies zu automatisieren? Derzeit sind sie alle auf April eingestellt und ich möchte sie alle auf Mai ändern, wenn ich sie in ein paar Tagen ausführe. Und jeden Monat möchte ich den Monat nur einmal eingeben (vielleicht in ein Textfeld in einem Formular oder irgendwo anders, wenn Sie einen besseren Weg kennen) und alle 6 Abfragen ändern lassen, ohne alle 6 manuell öffnen, zum richtigen Feld scrollen und das Kriterium ändern zu müssen.
Hinweis (zu VBA): Ich habe Excel VBA verwendet, also kenne ich die Grundlagen von VBA, aber ich weiß nicht wirklich etwas Spezifisches über Access (außer, dass ich den Code ein paar Mal gesehen habe). Und andere werden dies verwenden, die nichts über Access VBA wissen. Ich glaube also, ich habe eine ähnlicheFrage Antwortdas könnte man in VBA machen, aber ich würde es lieber anders machen. Wenn die Abfrage später leicht umgestaltet werden muss, wahrscheinlich von jemandem, der Access VBA überhaupt nicht kennt, wäre es schön, eine Lösung ohne VBA zu haben, wenn das überhaupt möglich ist.
Antwort1
Es gibt eine einfache Möglichkeit, bei der Ausführung der Abfrage den Monat abzufragen: Geben Sie in der Abfrage [Monat eingeben] an derselben Stelle ein, an der jetzt der Monatsname steht.
Wenn die Abfrage ausgeführt wird, wird ein Dialogfeld zur Eingabe des Monats angezeigt. Sie können in die eckigen Klammern jeden beliebigen Text eingeben. Es muss nicht „Monat“ heißen. Dies definiert lediglich, was im Dialogfeld angezeigt wird. Diese Technik wird als „Parameterabfrage“ bezeichnet.
Um alle 6 Abfragen in einem einzigen Schritt auszuführen, ist VBA-Code erforderlich – allerdings sehr einfacher Code. Ihre Endbenutzer müssen nichts über VBA wissen – sie müssen nur ein Formular öffnen und auf eine Schaltfläche klicken.
Erstellen Sie ein Formular und platzieren Sie eine Schaltfläche darauf. Wählen Sie in der Eigenschaftenliste für diese Schaltfläche die Registerkarte „Ereignisse“ und dann das Ereignis „Beim Klicken“. Klicken Sie für das Ereignis „Beim Klicken“ auf die Schaltfläche „…“.
Dadurch wird das VBA-Codefenster mit dem Cursor an der richtigen Stelle geöffnet - Private Sub Command0_Click - wobei Command0 der Name der Schaltfläche ist. Geben Sie den Code wie gezeigt ein ...
Ersetzen Sie Ihre Abfragen durch die richtigen Namen und wiederholen Sie die Codezeile so oft wie nötig. Wenn Sie das Formular öffnen und auf die Schaltfläche klicken, werden nun alle Abfragen gleichzeitig ausgeführt.
Der nächste Schritt
Die letzte Verbesserung wäre, den Parameter einmal einzugeben und ihn dann automatisch auf alle Abfragen anzuwenden. Dies erfordert mehrere Schritte.
Erstellen Sie im VBA-Codefenster ein Code-„Modul“. Klicken Sie mit der rechten Maustaste in den Projektbereich des Fensters und wählen Sie Einfügen/Modul:
Fügen Sie im neuen Modul diesen Code hinzu:
gstrMonth ist eine globale Variablenzeichenfolge, die den Monatsnamen enthält. Die Funktion GetMonth wird in den Abfragen verwendet, um diesen Wert abzurufen.
Ändern Sie nun den Form1-Code wie folgt:
Das Sub-Element „AskForMonth“ zeigt ein Dialogfeld an, in das der Benutzer einen Monatsnamen eingeben kann. Diese Eingabe wird der Variable gstrMonth zugewiesen.
Im Command0 (Button)-Code fügen wir AskForMonth hinzu, bevor die Abfrage ausgeführt wird. Wiederholen Sie die Zeile „DoCmd“ erneut für jede Abfrage mit den richtigen Abfragenamen.
Der letzte Schritt besteht darin, den Parameter in den Abfragen durch einen Aufruf der Funktion „GetMonth“ zu ersetzen. Anstelle von [Monat eingeben] geben Sie in den Abfragekriterien „GetMonth()“ ein.
Ich hoffe, dies ermutigt Sie, einige der VBA-Funktionen zu nutzen, um Ihre Access-Aufgaben zu automatisieren!