Felder in Subform ansprechen

Hallo,

ich suche nach einer Möglichkeit Felder in einem Unterformular anzusprechen. Ich habe dabei diverse Möglcihkeiten gefunden, so recht funktionieren wollen sie aber alle nicht.
Ob nun mit Me!Subform.feldname oder Me.Subform.feldname oder …
Viele der gefundenen Tipps sind alt (2000, 2003 …), kann es sein, dass es Versionsunterschiede gibt? Alte und neue Schreibweisen?
Ich habe Access 2003.
Wenn ich in VBA aus dem Hauptformular ein Unterformular oder aus einem Unterformular in ein anderes verweisen will, wie ist die Syntax?

Ich hoffe, das Ganze endlich zu verstehen,

danke,
Sebastian

Hallo,

ein „Unterformular“ (UFO) ist zunächst mal nur(!) ein Steuerelement, das wie jedes andere Control Eigenschaften und Methoden hat.

Ein UFO-Steuerelement ist in der Lage (und auch dafür entwickelt), irgendein anderes Formular in seinem „Fenster“ (Rahmen) anzuzeigen.

Dieses UFO-Steuerelement hat (u. a.) die Eigenschaften „Name“ (deren Inhalt in den meisten Fällen mit dem anzuzeigenden Formularnamen übereinstimmt, wenn man den Assistenten aus der Toolbox bemüht und was allgemein verwirrend wirkt) und „Form“, die den Verweis (Referenz) auf das angezeigte Formular(objekt) darstellt.

Weiterhin erhält das (Unter)Formular, sobald es vom UFO-Steuerelement angezeigt (geladen) wird,eine weitere(!) Eigenschaft „Parent“, die die Referenz aus dem Unterformular auf das Hauptformular darstellt.

D. h.
im HF:
ME!Ufo_Steuerelementname.FORM!Textfeld1
referenziert das Textfeld1 im Unterformular in aktuellen(!, das wird auch oft übersehen) Datensatz.

Nachdem in manchen Access-Versionen .FORM als Default-Eigenschaft definiert ist, reicht dann:

was bei Namensgleichheit zu sowas führt:
ME!Formular2!Textfeld1

In einem vom UFO-Steuerelement angezeigten (Unter)Form steht wie o. g. die Eigenschaft „Parent“ zur Verfügung:

Im (Unter)-Formular als Verweis auf ein Steuerelement (was wiederum ein UFO-Steuerelement sein kann) im Hauptform:

ME.PARENT!Textfeld2

ergibt den Inhalt des Textfeldes „Textfeld2“ im HAuptform.
woraus sich wiederum ergibt:

ME.PARENT!Ufo_Steuerelementname2.Form!Textfeld2

als Verweis auf das Textfeld2 des akt. Datensatzes im vom Ufo_Steuerelement2 angezeigten Formular.

Grundsätzlich (als Pi mal Daumen-Regel) sollte man
–Punkt vor Eigenschaften/Methoden
–Ausrufezeichen vor eigenerstellten Steuerelementen
benutzen. Es gibt Unterschiede zwischen den beiden, deren Erklärung aber hier zu weit führt.

siehe auch:
www.donkarl.com/?FAQ4.2

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Super! Vielen Dank, jetzt ist mir einiges klar geworden! Leider noch nicht alles… Ich muss das alles erst ausprobieren, bevor ich es richtig durchblicke, aber vorweg noch eine Frage:
Gilt das genauso, wenn ich von einer Form auf eine andere verweise, also nicht aus einem UFO, sondern mit zwei gleichberechtigten Formularen?
Wenn ich aus dem HF eine weiteres Steuerelement mit einem Formular drin öffne und dann auf ein Feld im Hauptform verweisen will, ist dann „Me“ das neue Formular oder das alte HF?
Und noch ne ganz doofe Frage:
Im VBA-Editor bei Access steht immer „Form_formname“. Ich nehme an, ich muss als Name des Steuerelementes dann „formname“ benutzen. Gibt es Fälle, in denen ich Gänsefüsschen brauche oder eckige Klammern brauche?
Vielen Dank schon mal!
Grüße,
Sebastian

Hallo,

Gilt das genauso, wenn ich von einer Form auf eine andere
verweise, also nicht aus einem UFO, sondern mit zwei
gleichberechtigten Formularen?

Wenn Du auf ein anderes, separat (für sich ) geöffnetes Formular zugreifen willst, muß die Forms-Auflistung des Application-Objektes benutzt werden:

Forms(„Formular3“)

und dort auf Textfeld1:
Forms(„Formular3“)!Textfeld1

oder gleichbedeutend:
Forms!Formular3!Textfeld1

ausgeschrieben:
Application.Forms(„Formular3“).Controls.Item(„Textfeld1“)

(btw: —> da gibt es nirgends ein Ausrufezeichen :wink: )

Wenn ich aus dem HF eine weiteres Steuerelement mit einem
Formular drin öffne und dann auf ein Feld im Hauptform
verweisen will, ist dann „Me“ das neue Formular oder das alte
HF?

versteh ich nicht…

Me ist IMMER das akt. Form(-Objekt), in dem sich dieser Code befindet

Und noch ne ganz doofe Frage:

ist nicht "doof! :wink:

Im VBA-Editor bei Access steht immer „Form_formname“. Ich
nehme an, ich muss als Name des Steuerelementes dann
„formname“ benutzen.

Ja, kann man so (auch) sagen, besser ist aber:

Ich muß den Namen des Formulares so nehmen, wie er im Datenbankfenster/Formulare zu finden ist.

Dieses „Form_formname“ ist der Name der Formularklasse, die erzeugt wird, sobald das Formular Code besitzt (Form-Eigenschaft „Enthält Modul“ auf ja steht.)

"Gibt es Fälle, in denen ich Gänsefüsschen

brauche oder eckige Klammern brauche?

Ja,

Gänsefüße sind die Begrenzungszeichen eines Literalstrings (fester Text/Zeichen im Code) in VBA.

Eckklammern (um den ganzen Namen) sind nötig, wenn in Namen Sonder- und/oder Leerzeichen benutzt oder der Name ein reserviertes Wort ist. werden.

Vielverbocktes Beispiel:

„Name“ als Name für ein Tabellenfeld.

Dann bedeutet:

Me.Name —> der Name des Forms, in dem dies benutzt wird.

Me.[Name] (wobei besser, aber nicht ausschlaggebend hier: Me![Name]) —> der Verweis auf ein Textfeld mit Namen „Name“.

verwirrend, gell :wink:)

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Okay, dankeschön!
Damit komme ich erstmal weiter! Nun konnte ich einige Werte zwischen den Forms hin- und herreichen. Super!

NEUE FAQ:3080 Zugriff auf Felder in UFOs
Hallo Franz,

danke für die ausführliche Beschreibung.

Ich habe mir erlaubt (dein Einverständnis vorausgesetzt), diese als FAQ:3080 zu verewigen :smile:

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Hallo Wolfgang,

na klar doch… :wink: