Februar 27, 2021, 15:57:06

Neuigkeiten:

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


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

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

Carl

Februar 14, 2021, 13:48:54 #4 Letzte Bearbeitung: Februar 14, 2021, 13:53:17 von Carl
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.

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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

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

Carl

Februar 14, 2021, 17:47:33 #10 Letzte Bearbeitung: Februar 14, 2021, 19:39:44 von Carl
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
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

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