Ich verwende den Parameter OpenArgs
, um einen Wert zu senden, wenn DoCmd.OpenForm
:
Ich verwende dann Me.OpenArgs
innerhalb des geöffneten Formulars, um den Wert zu erfassen. Es sendet manchmal einen Null -Wert anstelle der ursprünglichen Zeichenfolge. Was ist los?
Eine sehr interessante Alternative zu diesem Argument "openArgs" ist die Verwendung der Auflistung .properties des Objekts currentProject.allforms ("myFormName"). Wenn Sie einen Wert an ein Formular übergeben müssen (z. B. einen Filter, der von einem anderen Steuerelement oder einem anderen Formular geerbt wurde), fügen Sie einfach die entsprechende Eigenschaft für Ihr Formular hinzu und fügen Sie diesen Wert zu dieser Eigenschaft hinzu.
Beispiel:
%Vor%Die aufgerufene Funktion versucht, den Wert der Eigenschaft "formFilter" des Objekts zu aktualisieren. Wenn die Eigenschaft nicht vorhanden ist (err 2455 wird ausgelöst), wird sie als neue Eigenschaft im Fehlerverwaltungscode hinzugefügt.
%Vor%Dies tritt häufig während der Entwicklung auf, wenn das Formular bereits geschlossen ist (z. B. im Bearbeitungsmodus) und Sie die Funktion docmd.OpenForm aufrufen. In diesem Fall wird das Formular in den normalen (Ansichts-) Modus versetzt und die OnOpen- und OnLoad-Ereignisse werden ausgelöst, aber die OpenArgs-Eigenschaft wird auf null gesetzt, nicht auf das, was Sie an docmd.OpenForm übergeben haben.
Die Lösung besteht offensichtlich darin, das Formular zu schließen, bevor Sie es mit docmd.OpenForm aufrufen. Es gibt jedoch eine Problemumgehung, die ich gerne verwende. Im OnOpen-Ereignis überprüfe ich, ob me.OpenArgs null ist und wenn es ist, ersetze ich es durch einige Debug-Werte.
%Vor% Ich hatte gerade dieses Problem. Die Zeichenfolge Arg
wurde nicht übergeben, da der Bericht bereits geöffnet, aber nicht sichtbar war. Es war offen geblieben, als der Code mit Null string error
abgestürzt ist.
Die Lösung bestand darin, den Bericht im unmittelbaren Fenster mit
zu schließen %Vor%Es hat meinen Fehler behoben und die Argumente wurden richtig übergeben.
Es könnte sein, dass Sie Ihr Formular bereits geöffnet haben (wie vorgeschlagen), aber prüfen Sie einfach auf Null und das Formular wird auch mit fehlenden Argumenten umgehen.
Dies ermöglicht das Öffnen des Formulars für einen kurzen Blick (durch Sie oder die Benutzer), wenn die Argumente nicht entscheidend sind.
%Vor%Ein Nullwert kann an OpenArgs übergeben werden, indem der Wert im OpenForm-Aufruf weggelassen wird oder indem auf das Formular in der Seitenleiste "Zugriffsobjekte" doppelgeklickt wird.
Wenn es ein modales Formular ist, dann sollte explizit prüfen, ob es geöffnet ist und schließen Sie es vor dem Öffnen, wenn dies der Fall ist. Dies ist eine häufige Frage.
Dasselbe könnte natürlich für alle Formen gemacht werden, nicht nur für modale, und dann würden Sie die Null-Prüfung nicht benötigen (vorausgesetzt, Sie geben niemals null an). Aber oft gibt es in einem Projekt viele Formulare und sogar noch mehr OpenForm-Aufrufe als Formulare ...
Ist der Wert von einem Benutzer abgeschlossen Kontrolle? Stellen Sie sicher, dass der Fokus vom Steuerelement verschoben wird, bevor Sie die OpenForm-Linie ausführen?
EDIT: Die Werteigenschaft des Steuerelements wird dem vorherigen Wert entsprechen, der null sein kann, es sei denn, Sie tun dies.
Ich glaube, ich habe die Antwort auf mein Problem gefunden:
Nach meiner Erfahrung muss OpenArgs sofort nach dem Öffnen des Formulars behandelt werden. (Link)
Ich habe dies geprüft, indem ich eine Pause gemacht habe, bevor ich versucht habe, den OpenArgs-Wert zu verwenden, und es war null. Aber wenn ich die Pause entferne, zeigt das Programm keinen Fehler an. Dies muss nur während der Entwicklung geschehen.
Tags und Links ms-access access-vba openform openargs