Button soll letzten Eingabewert verändern

Von: , Frage gestellt am Do, 27. Sep 2007

Hallo,
Habe ein Formular mit vielen Eingabefeldern

im Formular ist Feld1 focusiert --> Eingebender soll Werte die entweder netto oder brutto eingeben. Gibt er brutto ein, alles ok ! gibt er netto ein soll durch Betätigen des Buttons der Wert brutto werden
nächstes Feld2 --> dito Problem, der GLEICHE Button soll für weitere 40 Felder tätig werden (ich kann nicht für jedes Feld einen Button haben)
usw.....

Vielleicht sagt mir jemand wie ich das Feld mit der letzten Eingabe wiederfinde nachdem der focus vom Feld auf Button gegangen ist, denn im Button muss ich ja sagen multipliziere den Wert des Feldes das den Focus als letztes abgegeben hat mit der Konstante. Gibt es einen anderen Weg ?
Für jeden Hinweis dankbar !
Gruß
Reinhart

5 Antworten zu dieser Frage

  1. Antwort von nach 3 Stunden 0 hilfreich
    Re: Button soll letzten Eingabewert verändern

    Hallo,
    Habe ein Formular mit vielen Eingabefeldern

    im Formular ist Feld1 focusiert --> Eingebender soll Werte
    die entweder netto oder brutto eingeben. Gibt er brutto ein,
    alles ok ! gibt er netto ein soll durch Betätigen des Buttons
    der Wert brutto werden
    nächstes Feld2 --> dito Problem, der GLEICHE Button soll
    für weitere 40 Felder tätig werden (ich kann nicht für jedes
    Feld einen Button haben)
    usw.....

    Hallo,

    ich habe eine Lösung, die funktioniert aber leider nicht die kürzeste Version darstellt.
    Für jedes Eingabefeld wird eine Ereignisprozedur eingerichtet, die bei Eintritt in das Eingabefeld einen Verweis auf sich selbst an eine öffentliche Variable übergibt.

    Bei Klick auf einen Button kann dann mit Hilfe des letzten Verweises auf das jeweilige Feld zurückgegriffen werden.

    Dim aktuellesFeld As Control
    Private Sub Text0_Enter()
    Set aktuellesFeld = Screen.ActiveControl
    End Sub
    Private Sub Text1_Enter()
    Set aktuellesFeld = Screen.ActiveControl
    End Sub
    Private Sub Text2_Enter()
    Set aktuellesFeld = Screen.ActiveControl
    End Sub
    Private Sub BruttoButton_Click()
    aktuellesFeld.Value = aktuellesFeld.Value * 5 'stellvertretend für Bruttoberechnung
    End Sub
    Alternativ kann man ein Klassenmodul einrichten, welches das Eintrittsereignis für jedes Eingabefeld "abfängt" und die entsprechende Prozedur für das jeweilige Feld ausführt. Dann spart man sich für z.B. 40 Eingabefelder die einzelnen Ereignisprozeduren. Sowas ähnliches habe ich schon mal gesehen aber leider reichen meine Programmierkenntnisse bzgl. Klassenmodulen nicht aus, um dies zu erstellen. Vielleicht kann hier jemand anderes weiterhelfen.

    Gruß, tester!

    • Antwort von nach 7 Stunden 0 hilfreich
      Re^2: Button soll letzten Eingabewert verändern

      Hallo tester,
      vielen Dank für deine Hilfe
      Reinhart [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  2. Antwort von nach 5 Stunden 0 hilfreich
    Re: Button soll letzten Eingabewert verändern

    Hallo Reinhard,

    der Weg, den Tester beschrieben hat, ist im Ansatz schon richtig.
    Allerdings geht es noch einfacher mit 5 Zeilen Code:

    Beim Ereignis "beim Klicken" der Taste mit der Bezeichnung "Bruttotaste" folgendes eintragen:

    Private Sub Bruttotaste_Click()
    Dim FN
    FN = Screen.PreviousControl.Name
    Me(FN) = Me(FN) * 1.19
    End Sub

    Erklärung:
    Screen.PreviousControl.Name = Bezeichnung des vorherigen Feldes
    bevor die Taste gedrückt wurde

    Me = das aktuelle Formular
    (FN) = dynamischer Feldname als Variable

    Wichtig!! VB kann nicht mit einem Komma umgehen, da es sich um ein amerikanisches System handelt, daher der Punkt bei 1.19!

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

    • Antwort von nach 7 Stunden 0 hilfreich
      Re^2: Button soll letzten Eingabewert verändern

      Hallo Wolfgang,
      vielen Dank für diese Lösung.!!!!

      Reinhart [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach 18 Stunden 0 hilfreich
      Re^2: ;-)

      Hallo Reinhard,

      der Weg, den Tester beschrieben hat, ist im Ansatz schon
      richtig.
      Allerdings geht es noch einfacher mit 5 Zeilen Code:
      Hallo,

      mhh, "PreviousControl" statt "ActiveControl" also.
      Ich muss wohl doch öfter mal in den Objektkatalog schauen, wenn die Lösung so nahe liegt.

      Viele Grüße, tester

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!