Eigentlich ist der beste Vorschlag, den ich hier geben kann, tatsächlich, keine Parameter zu übergeben. Einfach in Ihrem Formular im on-Open Event oder noch besser im späteren onLoad Event ist es einfach, eine Referenz in Ihrem Code zum VORHERIGEN aufrufenden Formular zu nutzen. Das Schöne an diesem Ansatz ist, dass wenn Sie im Laufe der Zeit von einem Parameter auf 10 Parameter gehen, dann müssen Sie den Parameter-Analysecode nicht ändern und müssen noch nicht einmal den Aufrufcode ändern. Tatsächlich gibt es überhaupt keinen Code zu ändern, wenn Sie sich dazu entscheiden, vorherige Werte aus dem aufrufenden Formular zu untersuchen.
Also, denken Sie daran, die Verwendung von offenen Argumenten ist nur eine Einbahnstraße. Sie können es nicht verwenden, um Werte an das aufrufende Formular zurückzugeben. Außerdem müssen alle offenen Argumentparameter Zeichenfolgen sein. Sie verlieren also die Möglichkeit, Datentypen wie Ganzzahlen oder sogar Datum- und Zeitformatierungen zu verwenden, was ziemlich problematisch zu analysieren sein kann. Und wie Sie im Beispiel sehen können, kann der Code zum Analysieren von Zeichenfolgen ein wenig unordentlich werden.
Die einfache Lösung besteht darin, in jedem Formular, in dem Sie Werte aus dem VORHERIGEN Formular benötigen, eine Modulniveau-Variable wie folgt zu deklarieren
Dim frmPrevous as Form.
Dann in Ihrem Formular im onLoad-Event heben Sie ganz einfach den Namen des vorherigen Formulars auf:
Set frmPrevious = Screen.ActiveForm
Das ist es. Wir sind fertig!
Wir haben hier nur eine Zeile Code geschrieben (ok, zwei, wenn man die Deklarationsanweisung mitzählt). Ab diesem Punkt können Sie in jedem Teil Ihres Formularcodes auf die Ereigniseigenschaften, Felder oder Werte im vorherigen Formular verweisen, indem Sie folgendes tun
Msgbox "Primärschlüssel-ID des vorherigen Formulars = " & frmPrevious.ID
Und nehmen wir an, aus irgendeinem Grund möchten Sie, dass das vorherige Formular Datensätze neu lädt, wie in einem fortlaufenden Formular. Dann können wir gehen:
frmPrevious.NeuAbfragen
Oder, zwingen Sie eine Datenspeicherung:
frmPrevious.Dirty = false
Also wird das oben Genannte fast so natürlich und praktisch wie die Verwendung von "ME" in Ihrem aktuellen Code. Ich finde das so einfach und einfach, dass ich denke, dass dies von vornherein Teil von Access sein sollte.
Und wie erwähnt, sind die Anwendungsmöglichkeiten endlos, ich kann JEDE Spalte oder jeden Wert aus dem aufrufenden Formular überprüfen. Sie können sogar Variablen und Funktionen als öffentlich deklarieren, und dann können sie verwendet werden.
Und beachten Sie, dass dies BEIDEN WEGE funktioniert. Ich kann Werte im aufrufenden Formular speichern und ändern. So kann ich den Wert einer beliebigen Spalte/Steuerung im aufrufenden Formular aktualisieren oder ändern.
Und es ist absolut keine Analyse erforderlich. Darüber hinaus funktioniert der obige Code-Schritt selbst dann, wenn dasselbe vorhandene Formular von verschiedenen Formularen aufgerufen wird. In allen Fällen kann die aufrufende ID des Formulars ohne Änderung Ihres Codes abgerufen werden.
Und sogar im Falle, dass ich viele verschiedene Formulare starte und dieses bestimmte Formular aufrufe, können Sie die ID-Spalte immer noch herausziehen. Und wenn die Spalten aus verschiedenen Formen unterschiedlich sein könnten, können Sie einfach öffentliche Variablen oder öffentliche Funktionen in den aufrufenden Formularen mit dem GLEICHEN Namen deklarieren. Dann können wir gehen:
Msgbox "Erstellungsdatum des aufrufenden Formulars Datensatz = " & frmPrevous.DateCreated
Also kann das Erstellungsdatum eine öffentliche Variable oder eine öffentliche Funktion im vorherigen Formular sein, die jede erdenkliche Spalte aus der Datenbank sein kann.
Übergeben Sie also keine Werte zwischen Formularen, sondern übergeben Sie einfach eine Referenz zum aufrufenden Formular. Dies ist nicht nur spektakulär flexibler als die hier gezeigten anderen Methoden, sondern auch ein objektorientierter Ansatz, bei dem Sie nicht auf die Übertragung von Werten beschränkt sind.
Sie können AUCH Werte im aufrufenden Formular zurückgeben, indem Sie einfach den Wert einer beliebigen Steuerung festlegen, die Sie möchten (frmPrevous.SomeContorlName).
Und wie erwähnt, sind Sie nicht auf das Übertragen von Werten beschränkt, sondern haben vollen Zugriff auf Code, Eigenschaften wie Dirty und alles andere, was im aufrufenden Formular vorhanden ist.
Ich habe als Standard-Codierungspraxis das oben Genannte für fast jedes Formular übernommen. Ich deklariere und richte einfach die Formularreferenz ein. Dadurch erhalten Sie eine praktische vorherige Formulareferenz, die beim Schreiben von Code genauso nützlich ist wie die "ME"-Referenz.
Mit diesem Codierungsstandard kann ich den Code zwischen verschiedenen Formularen mit unterschiedlichen Namen kopieren und einfügen, und im Allgemeinen wird mein Code weiterhin ohne Änderung ausgeführt.
Und als weiteres Beispiel haben alle meine Formulare eine öffentliche Funktion namens MyDelete, die natürlich den Datensatz im Formular löscht. Wenn ich also aus irgendeinem Grund den Datensatz im vorherigen aufrufenden Formular löschen möchte, ist es ein einfaches Vorgehen, das Folgende zu tun
frmPrevious.MyDelete
Ich kann also Daten im vorherigen Formular speichern. Ich kann das vorherige Formular neu abfragen, ich kann Code im vorherigen Formular ausführen, ich kann Werte an das vorherige Formular zurückgeben, ich kann Werte und ALLE Spalten untersuchen, und das alles für den Preis von nur einer einzigen lächerlichen Codezeile, die eine Referenz zum aufrufenden Formular setzt.