Hallo
Der Code der Prozedur lautet
Public Sub initialize(nummer As String)
Me.nummer = nummer
DoCmd.SetWarnings False
End Sub
Es gibt ansonsten keine Bedingungen.
Vermutlich hast Du hier ein Standard-Klassenmodul und kein Form-Klassenmodul als Hintergrund.
Die Sache ist die, dass ich halt aus der objektorientierten
Welt komme und gerne eine Referenz auf das Formular-Objekt
hätte. Die bekomme ich mit der DoCmd.OpenForm-Methode doch
nicht, oder?
Vermutlich siehst Du die Verhältnisse nicht richtig…
Ein Formular ist ein Objekt und hat u. U. ein Form-Klassenmodul.
Weiterhin treten in einem Formular und auch bei dessen Steuerelement-Objekten bei bestimmten Vorgängen Ereignisse auf, die einen Aufruf einer sogenannten Ereignisprozedur (falls durch einen Eintrag „[Ereignisprouedur]“ (deutsches Access) in der entspr. Eigenschaft dieser Vorgang definiert ist) zu Folge haben.
in allen diese Prozeduren, die im Form-Klassenmodul stehen, kann mit dem Schlüsselwort „Me“ auf das aktuelle Formular(objekt) referenziert werden. Weiter Möglichkeiten, auf ein Formular-Objekt zu referenezieren, sind die
-
Angabe des Formularnamens in der Forms-Auflistung des Application-Objektes: Forms!frmMeinFormular1 (Kurzform durch Verwendung von „!“)
-
Angabe des Form-Klassennamens: Form_frmMeinFormular1
Insofern ist eine Referenz auf ein Objekt im Formular ( z. B. ein Textfeld) so zu gestalten:
Forms!frmMeinFormular1!txtMeinTextfeld
Form_frmMeinFormular1!txtMeinTextfeld
Anstelle von „ME“ kann natürlich auch die ausführliche Schreibweise benutzt werden, hat halt dann den Nachteil der Unübersichtlichkeit und der Fehlerträchtigkeit z. B. beim Einsatz eines Forms als Unterformular
(ich weiß, dass es die „openArgs“ gibt, aber damit komme ich nicht zurecht).
WOMIT kommst Du nicht zurecht?
… dass es auf diese Weise manchmal funktioniert und manchmal
nicht und ich nicht weiß, woran das liegt.
Das muss man halt Fall für Fall untersuchen. Jedenfalls gibt es da keine Bugs in VBA (soweit mir bekannt ist).
Teilweise werden die „OpenArgs“ einfach nicht übernommen (sind dann Null)
Naja, die Openargs-Eigenschaft im aufgerufenen Form ist halt NULL, wenn im Aufruf mit Docmd.Openform… gar kein Openargs-Parameter angegeben ist, bzw. dort eine Variant-Variable selber den „Wert“ NULL hat.
oder
es kommt der Fehler „The OpenForm action was canceled“.
Dieser Hinweis kann mehrere Gründe haben. Auch das ist fallabhängig zu untersuchen.
Zumindest bei letzterem habe ich durch meine „andere“ Methode
festgestellt, dass es wohl daran liegt, dass das
Dialogformular im Design View geöffnet ist.
Naja, solche Zustände sind halt zu vermeiden. Mit Standard-Aufruf eines Forms (Docmd.Openform) ist nur eine Instanz eines Form möglich.
Beispiel für den Aufruf eines anderen modalen Forms mit Übergabe eines Openargs-Wertes aus einer Ereignisprozedur („Beim Klicken“ einer Schaltfläche („btnOF2“) und ohne Filterung von Datensätzen ):
Im „frmMeinFormular1“:
Sub btnOF2\_Click()
Dim strNummer as String
strNummer =nz(Me!txtNummer,"abc123456")
On Error Resume Next
Docmd.Openform "frmMeinFormular2",,,,acDialog,strNummer
End Sub
Im „frmMeinFormular2“
Sub Form\_Open(Cancel as Integer)
If IsNull(Me.Openargs) Then
Cancel =true
Else
Me!txtMeinTextfeld1 = Me.Openargs
End If
End Sub
'evtl, je nach "Datenverhältnissen" das Load-Ereignis benutzen:
Sub Form\_Load()
If not IsNull(Me.Openargs) Then Me!txtMeinTextfeld1 = Me.Openargs
End Sub
Viele Grüße vom Bodensee
Franz, DF6GL