Frage

Ich bin mit dem OpenArgs Parameter einen Wert zu senden, wenn DoCmd.OpenForm mit:

DoCmd.OpenForm "frmSetOther", acNormal, , , acFormAdd, acDialog, "value"

ich dann Me.OpenArgs innerhalb der geöffneten Form verwenden Sie die Wert zu greifen. Es sendet manchmal ein Null Wert anstelle der ursprünglichen Zeichenfolge. Was ist falsch?

War es hilfreich?

Lösung

Eine sehr interessante Alternative zu diesem „OpenArgs“ Argumente ist die .properties Sammlung der currentProject.allforms ( „myFormName“) Objekt zu verwenden. Wenn Sie benötigen einen Wert in eine Form (wie ein Filter aus einer anderen Steuerung oder einer anderen Form geerbt, zum Beispiel) zu übergeben, fügen Sie einfach die entsprechende Eigenschaft für Ihre Form und Ihr Wert dieser Eigenschaft hinzufügen.

Beispiel:

addPropertyToForm "formFilter","Tbl_myTable.myField LIKE 'A*'",myFormName

Die aufgerufene Funktion wird versuchen, den Wert der „formfilter“ Eigenschaft des Objekts zu aktualisieren. Wenn die Eigenschaft nicht existiert (err 2455 angehoben wird), wird es als eine neue Eigenschaft in dem Fehlermanagement-Code hinzugefügt werden.

Function addPropertyToForm(_ 
    x_propertyName as string, _
    x_value As Variant, _
    x_formName As String) 
As Boolean

On Error GoTo errManager
CurrentProject.AllForms(x_formName).Properties(x_propertyName).Value = x_value
addPropertyToForm = True
On Error GoTo 0

Exit Function

errManager:
If Err.Number = 2455 Then
    CurrentProject.AllForms(x_formName).Properties.Add x_propertyName, Nz(x_value)
    Resume Next
Else
    msgbox err.number & ". The property " & x_propertyName & "was not created"
End If

End Function 

Andere Tipps

Dies geschieht häufig während developpment whem das Formular bereits (im Bearbeitungsmodus zum Beispiel) oppened ist und Sie berufen sich auf die DoCmd.OpenForm Funktion. In diesem Fall wird die Form in normalen (Ansicht) Modus versetzt und die OnOpen und OnLoad-Ereignisse werden angehoben, aber die OpenArgs Eigenschaft wird keine mater auf null, was Sie DoCmd.OpenForm übergeben.

Die Lösung ist offensichtlich das Formular zu schließen, bevor Sie es mit DoCmd.OpenForm aufrufen. Allerdings gibt es eine Abhilfe, die ich verwenden möchten. Im OnOpen Ereignisse prüfe ich, ob Me.OpenArgs null ist und wenn es ersetze ich es mit einigem Debug-Wert ist.

if not isnull(me.OpenArgs) then
   myvalue = me.OpenArgs
else
   msgbox "Debug mode"
   myValue = "foo"
endif

Ich hatte gerade dieses Problem. Die Arg Zeichenfolge nicht bekommen bestanden, weil der Bericht bereits geöffnet war, aber nicht sichtbar. Es war offen gelassen, wenn der Code mit dem Null string error abgestürzt ist.

Die Lösung wurde den Bericht in dem sofortigen Fenster zu schließen, mit

Docmd.Close acReport, "myReport"

Es fixiert meine Fehler und die args wurden ordnungsgemäß übergeben.

Es könnte sein, dass Sie bereits Ihre Form geöffnet haben (wie vorgeschlagen), sondern prüft nur für null und die Form wird auch Öffnung mit fehlenden Argumenten behandeln.

Auf diese Weise können Sie das Formular für einen schnellen Blick zu öffnen (von Ihnen oder den Benutzer), wenn die Argumente sind nicht von entscheidender Bedeutung.

Private Sub Form_Open(Cancel As Integer)
    If Not IsNull(Me.OpenArgs) Then
        Me.lblHeading.Caption = Me.OpenArgs
    End If
End Sub

Ein Nullwert kann durch Weglassen des Wertes im ÖffnenFormular- Anruf oder durch einen Doppelklick auf das Formular in der Access Objects Sidebar OpenArgs übergeben werden.


Wenn es ein modal Form, sollten Sie explizit überprüfen, ob es es geöffnet ist und schließen, bevor es, wenn so zu öffnen. Dies ist eine gemeinsame Gotcha.

Das gleiche könnte natürlich für alle Formen durchgeführt werden, nicht nur modal diejenigen, und dann würden Sie nicht den Null-Check müssen (vorausgesetzt, Sie nie daran null übergeben). Aber oft gibt es viele Formen in einem Projekt, und noch mehr ÖffnenFormular- Anrufe als Formen ...

Ist der Wert von einem Benutzer die Kontrolle übernommen abgeschlossen? Stellen Sie sicher, dass sich der Fokus von der Steuerung bewegt wird, bevor Sie die ÖffnenFormular- Zeile ausführen?

EDIT:. Der Wert Eigenschaft der Steuerung wird auf den vorherigen Wert gleich sein, die null sein kann, es sei denn, Sie tun dies,

Ich denke, dass ich die Antwort auf mein Problem gefunden:

  

Nach meiner Erfahrung hat OpenArgs sofort nach dem Öffnen der Form behandelt werden. (link)

Ich habe dies durch eine Pause setzen, bevor Sie den OpenArgs Wert zu verwenden, und es war null. Aber wenn ich die Pause zu entfernen, zeigt das Programm keine Fehler. Dies muss nur geschehen, während der Entwicklung.

hier Antwort. Ihre Form kann bereits geöffnet, auch im Entwurfsmodus: http: // www. tech-archive.net/Archive/Access/microsoft.public.access.formscoding/2007-02/msg00928.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top