none
Vom Steuerelement Textbox auf die Eigenschaft Tag des Formulares zugreifen

    Frage

  • Hallo alle zusammen

    Wie greife ich in VBA Access im Ereignis "Beim Verlassen" einer Textbox auf die Eigenschaft Tag des Formulares zu? Folgendes habe ich schon probiert:

        Debug.Print Form.Name
        Debug.Print "Tag form ist: " & Form.Tag
        Debug.Print "Tag me ist: " & Me.Tag
        Debug.Print "Tag Parent ist: " & Parent.Tag

    Leider spukt mir keine der Anweisungen den Inhalt des Tag vom Formular aus.

    Hintergrund der Frage ist:

    Auf einem Formular "frmMonat" habe ich vier weitere Unterformulare gleicher Herkunft (frmWoche). Die Unterformulare habe ich mit dem Namen w1, w2, w3 und w4 in der Eigenschaft Name gekennzeichnet. Ebenso haben die vier Unterformulare im Feld Tag die Werte wo1, wo2, wo3 und wo4. Die Unterformulare zeigen durch einen Filter unterschiedliche Daten an. Beim Verlassen einer Textbox im Unterformular FrmWoche muss nun ein Wert aus dem Hauptformular geholt werden, welcher in einem bestimmten Feld (fldWoche1, fldWoche2, fldWoche3, fldWoche4) steht. Also möchte ich gerne beim Ereignis Verlassen des Feldes Prüfen welches Tag das Formular hat und dann im Hauptformular auf den entsprechenden Inhalt los gehen:

    if me.form.tag = wo1 then myValue = parent.fldWoche1.Value

    Vielen Dank für Hilfestellungen jeder Art
    Beste Grüsse

    Mittwoch, 14. Dezember 2016 19:51

Antworten

  • Hallo,

    wenn der Tag des Formulares gemeint wäre, also des Herkunfstobjektes (frmWoche) des UFos, dann wäre Me.Tag richtig. Ich vermute allerdings, dass du den Tag der 4 Unterformular-Steuerelemente im Hauptformular meinst. Den solltest du aus dem jeweiligen, gerade aktiven UFo heraus so bekommen:

    Me.Parent.ActiveControl.Tag


    Karl

    • Als Antwort markiert mwch Freitag, 23. Dezember 2016 19:29
    Mittwoch, 14. Dezember 2016 20:43

Alle Antworten

  • Hallo,

    wenn der Tag des Formulares gemeint wäre, also des Herkunfstobjektes (frmWoche) des UFos, dann wäre Me.Tag richtig. Ich vermute allerdings, dass du den Tag der 4 Unterformular-Steuerelemente im Hauptformular meinst. Den solltest du aus dem jeweiligen, gerade aktiven UFo heraus so bekommen:

    Me.Parent.ActiveControl.Tag


    Karl

    • Als Antwort markiert mwch Freitag, 23. Dezember 2016 19:29
    Mittwoch, 14. Dezember 2016 20:43
  • Lieber Karl,

    Supervielen Dank. Du hast perfekt richtig vermutet. Das klappt einwandfrei. Genau so habe ich mir das vorgestellt.

    Darf ich noch eine Anschlussfrage stellen?

    Wenn ich innerhalb eines der Unterformulare bin, und von einem Feld ins Andere wechsle, also im Unterformular selbst bleibe, dann wird das Ereignis Beim Verlassen ausgeführt. Wenn ich jedoch das Unterformular W1 verlasse indem ich in ein Feld des Unterformular W2 klicke, dann wird das Ereignis Beim Verlassen nicht ausgeführt.

    Der Hintergrund ist, dass ich in einem Feld des Unterformular eine Plausibilitätsprüfung beim Verlassen realisieren will.

    Wünsche schöne Weihachten
    Viele liebe Grüsse und besten Dank. 

    Freitag, 23. Dezember 2016 19:34
  • Hallo!

    Joo. Das Ereignis "Beim Verlassen" eines Steuerelementes tritt ein, wenn der Fokus an ein anderes Steuerelement im selben Formular geht. Steht auch so in der Hilfe. Der Hintergrund ist, dass das Steuerelement weiterhin das aktive in diesem (Unter-)Formular bleibt, wenn du das Formular wechselst.

    Ich selber verwende fast nie dieses Ereignis, weil es eben etwas "unzuverlässig" ist. Ausnahme ist manchmal das Einfärben des gerade aktiven Steuerelementes. Plausibilitätsprüfungen mache ich im Normalfall bei "Vor Aktualisierung".

    Die Anschlussfrage hast du übrigens vergessen. ;-)
    Naa, wenn etwas in dem von dir beschriebenen Moment stattfinden muss, kannst du das im Ereignis "Beim Verlassen" des (schon wieder) UFo-Steuerelementes im Hauptformular abfangen, mit einer halblustigen Syntax. z.B.

    If Me.ActiveControl.Form.ActiveControl.Name = "DeinSteuerelementImUFo" And _
        Me.ActiveControl.Form.ActiveControl.Value = "GanzBöserWert" Then
        MsgBox "So geht's aber nicht!"
        Cancel = True
    End If

    Also zuerst den Namen des aktuellen Steuerelementes im Ufo prüfen, dann den Wert, dann, was auch immer passieren soll, und am Schluss meistens das Abbrechen des Ereignisses, d.h. Fokus bleibt im UFo und im Steuerelement.

    Das ist natürlich nur ein Beispiel. Ich weiß ja nicht, was du wie prüfen willst und was die Reaktion sein soll. Das müsstest du näher beschreiben, falls dir o.a. nicht weiterhilft.


    Schöne Feiertage
    Karl


    Freitag, 23. Dezember 2016 21:01