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
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 (https://docs.microsoft.com/en-us/office/vba/api/Access.Form.OpenArgs)
Gruß
Andreas
uff, das wird schwer.
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
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"
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.
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
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 (http://www.donkarl.com?FAQ4.2).
gruss ekkehard
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
Hallo,
Openargs geht auch für Unterformulare:
z.B. eine Variable x im Unterformular: x = Me.Parent.OpenArgs
Gruß
Andreas
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.
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
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
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 (https://access.joposol.com/downloads/formulare/download/3-formulare/102-forminstanzen)