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…

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

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!

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)

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

Reinhart

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

Hallo tester,
vielen Dank für deine Hilfe
Reinhart

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

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