Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

mit button ein formular öffnen und record-source anweisen

Begonnen von Carl, Februar 14, 2021, 12:52:23

⏪ vorheriges - nächstes ⏩

Carl

Ich habe noch eine Frage. Ich soll ein Popup herstellen, auf dem verschiedene Btn liegen. Jeder dieser Btn öffne ein und das selbe Hauptformular, doch jeweils mit einer anderen Abfrage. Das HF soll mit einer Filtereinstellung geöffnet werden, die von den Knöpfen bestimmt wird, im übrigen Gebrauch aber dann wie bisher funktionieren. Damit möchte der Anwender einige ganz bestimmte und häufig gebrauchten Filtereinstellungen vor dem Öffnen des HF anbieten, um die Arbeit zu erleichtern. Es sind insgesamt 5 Knöpfe, für die ich 5 verschiedene Abfragen gemacht habe.

Problem: Der Button im Popup funktioniert mit diesen VBA nicht.

DoCmd.OpenForm "frmworkorder_mitjena"
Forms!frmworkorder_mitjena.RecordSource = "abfworkorder_mitjena"
Forms!frmworkorder_mitjena.RowSource = "abfworkorder_mitjena"
DoCmd.Close acForm, "frmworkorder_mitjena_Vorfach"

Wie kann ich den Button anweisen, das Formular mit dieser Abfrage zu öffnen?

Carl

andyfau

Hallo,
mit der Eigenschaft "OpenArgs" im DoCmd.OpenForm -Aufruf kannst Du beliebige Argumente an das Folgeformular übergeben und dort auswerten.
siehe auch:
https://docs.microsoft.com/en-us/office/vba/api/Access.Form.OpenArgs

Gruß
Andreas
Beste Grüße
Andreas

Carl


andyfau

Nur Mut. ;D Ist eigentlich ganz einfach, man darf nur die Übersicht nicht verlieren.
Der Vorteil von OpenArgs ist, dass man nichts zwischenspeichern muss.

Natürlich könnte man auch die Filterparameter in einer Tabelle zwischenspeichern und
dann wieder auslesen, wenn sie benötigt werden.

Beste Grüße
Andreas
Beste Grüße
Andreas

Carl

#4
Mit Openargs funktionieren die Filter nicht mehr, weil ich dann bei jeder Filteroption die recordsource wieder umstellen müsste auf etwas anders als das was openargs gesagt hat. Es soll sich aber alles anfühlen wie bisher. Nur dass eben ein Set von Filtereinstellungen übergeben werden sollen, die in einer Abfrage sind.

Zum Beispiel funktioniert das hier nicht, was sich auf das UFO bezieht.

DoCmd.OpenForm "frmworkorder_mitjena"
Forms!frmworkorderUFO_mitjena.RecordSource = "abfworkorder_mitjena"

andyfau

Was spricht dagegen beim Formularaufruf den kompletten Satz an Parametern per OpenArgs mitzugeben?

Oder habe ich die Fragestellung falsch verstanden: ?
Popup-Formular mit 5 Buttons, die alle dasselbe! Formular aufrufen sollen, wobei, je nach Button
im Folgeformular eine andere Abfrage mit vorgegebenem Filter als Recordsource ausgeführt wird.

Wenn man nach dem Aufruf dann wieder die Standardeinstellungen der Filter nutzen möchte, müssen diese dann natürlich auch wiederhergestellt werden.
Beste Grüße
Andreas

Carl

Ich rufe ja das Hauptformular auf, in dem sich das UFO befindet.

Muss man die Openarg-Anweisung auf das HF oder das UFO beziehen?

Carl

Beaker s.a.

Hallo Carl,
Wenn du das HFo filtern willst, würde ich es so machen.
Belasse im aufgerufenen Form die DS-Herkunft auf der kompletten Menge,
und setze die Eigenschaft "Beim Laden filtern" auf Ja.
Dann kannst du das Form direkt beim Öffnen filtern
DoCmd.OpenForm _
        FormName:="frmworkorder_mitjena", _
        FilterName:="DeinFilterEinesButtons"
Diesen Filter kannst du im Form dann auch löschen, und hast wieder alle
DS im Zugriff um sie ggfls. neu/anders zu filtern.
Mit einem UFo funzt Obiges allerdings nicht; das lässt sich per OpenForm
nicht öffnen.
Das geht dann so
DoCmd.OpenForm _
        FormName:="frmworkorder_mitjena"   'evtl. weitere Parameter angeben
With Forms!frmworkorder_mitjena.UFoControl.Form
    .Filter = "DeinFilterEinesButtons"
    .FilterOn = True
End With

Wegen Bezug zum UFo schaust du hier.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Carl

Hallo Beaker,

ja, ich adressiere das vermutlich nicht richtig. Der Button befindet sich außerhalb des Hauptformulars.

Das HF = "frmworkorder_mitjena"
das Steuerelement im HF = "UFfrmworkorderUFO"
das UFO ist "frmworkorderUFO_mitjena"

und dieses UFO frmworkorderUFO_mitjena soll geöffnet werden mit der Abfrage "abfworkorder_mitjena" als  recordsource

Carl

andyfau

Hallo,

Openargs geht auch für Unterformulare:

z.B. eine Variable x im Unterformular: x = Me.Parent.OpenArgs

Gruß
Andreas
Beste Grüße
Andreas

Carl

#10
Zitat von: Beaker s.a. am Februar 14, 2021, 15:20:34Hallo Carl,

Hallo Beaker, ich habe das jetzt so versucht. Er bringt keine Fehlermeldung, zeigt aber im Endlosformular keine Datensätze mit dem Kriterium "WOBereich=4" an. beim Laden filtern ist angestellt.

Ist die zweite Zeile richtig?

DoCmd.OpenForm "frmworkorder_mitjena"
    With Forms!frmworkorder_mitjena!frmworkorderUFO.Form
        .Filter = "WOBereich=4"
        .FilterOn = True
End With

HF = "frmworkorder_mitjena"
Steuerelement im HF = "UFfrmworkorderUFO"
das UFO ist "frmworkorderUFO_mitjena"
Ein Feld das gefiltert werden soll: [WOBereich]

Carl

Nachtrag: Ich habe es mit dem Code hinbekommen. Danke für die Hilfe.

Beaker s.a.

Hallo Carl,
Der zuletzt gezeigte Code sollte eigentlich funzen, ausser es gibt
in der DS-Herkunft des UFo kein Feld "WOBereich" und/oder die 4 ist
ein '4'.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

crystal

Hallo,
meine ganz persönliche Erfahrung ist, für die Interaktion zwischen verschiedenen Formularen Globale Variable zu benutzen (als Public in einem Standard-Modul definiert).
Bsp: im aufrufenden Formular werden globale Werte gesetzt, die im OPEN-Event des aufgerufenen Formulars ausgewertet werden (Record- bzw. RowSource, Initialwerte für Textfelder etc. pp).

Viele warnen vor globalen Variablen, aber manchmal ist deren Verwendung einfacher, als sich mit OpenArgs und Filtern herumzuquälen, da besonders OpenArgs selbst zusammengebastelt und geparst werden müssen. Bei globalen Variablen kann man deren Typ gleich richtig definieren und entspr. Code-Abschnitte sind m. E. leichter zu verstehen und nachzuvollziehen.

Ähnliches gilt für TempVars, da sie meines Wissens nur Strings sein können.

Mit globalen Variablen sind auch Rückgaben an das aufrufende Formular einfach zu bewerkstelligen (z. B. gblnCancel as Boolean).

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

ebs17

ZitatJeder dieser Btn öffne ein und das selbe Hauptformular, doch jeweils mit einer anderen Abfrage.
Ein mehrfaches Öffnen des gleiches Formulares wäre eher ein Fall für FormInstanzen
Mit freundlichem Glück Auf!

Eberhard