Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1548to1552
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform: Textfeld identifizieren

Userform: Textfeld identifizieren
30.03.2017 14:39:10
Ingo
Hallo liebes Forum,
meine Suche im Forum ergab leider keine Treffer, die mein Problem beschreiben. Daher suche ich erneut bei Euch Unterstützung:
Beschreibung:
Ich habe eine UserForm mit ca. 50 Eingabefeldern (Textfeldern). Alle Felder sind bereits vorbelegt, aber editierbar. Bei einer Änderung eines beliebigen Textfeldes sollen in Abhängigkeit des Feldes z. T. unterschiedliche Aktionen durchgeführt werden.
Problem:
Gibt es eine Möglichkeit das Textfeld, in welchem eine Änderung gemacht wurde (also 1 von 50) zu identifizieren ohne jedesmal (und für jede TextBox!!!) über die Ereignissteuerung (siehe folgendes Beispiel) zu gehen?
privat

Sub TextBox23_AfterUpdate()
Anweisung1
Anweisung2
etc.
End Sub

Diese Ereignisroutine müsste für jede TextBox geschrieben werden, was den Code extrem in die Länge zieht und zudem in der Wartung sehr aufwendig und das Ganze unübersichtlich macht.
Da gibt es doch bestimmt eine Eigenschaft, die man auswerten kann und einen Trigger der dann greift (wenn irgendwo auf der UserForm / einem beliebigen Textfeld etwas geändert wird).
Ziel:
Ziel wäre das geänderte Textfeld zu erkennen und mittels Funktion dynamisch zu gestalten.
Kann mir einer von Euch weiter helfen?
VG
Ingo

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.Caller
30.03.2017 14:55:08
Fennek
Hallo,
ja, es geht, dass EIN Makro bei Änderung in einer von beliebig vielen TextBoxen aktiviert wird.
Suche nach dem oben genannten Stichwort.
mfg
Application.Caller = "Error" ! (owT)
30.03.2017 15:01:34
EtoPHG

AW: Application.Caller nicht bei Userform
30.03.2017 15:10:45
Daniel
Application.Caller ist die Methode zur Ermittlung des aufrufenden Steuerelements, wenn du mit Formularsteuerelementen auf dem Tabellenblatt arbeitest.
in Userforms oder mit ActiveX-Steuerelementen funktioniert das nicht.
Gruß Daniel
AW: Application.Caller nicht bei UF - alternative?
30.03.2017 15:19:50
Ingo
Hallo Daniel,
vielen Dank für die Info. Das habe ich fast schon befürchtet. Siehst Du eine andere Möglichkeit als für jede der TextBoxen eine eigene Ereignisprozedur zu spendieren?
VG
Ingo
Anzeige
AW: Application.Caller nicht bei UF - alternative?
30.03.2017 15:27:30
Daniel
Lies doch einfach meine andere Antwort, dann brauche ich mich nicht wiederholen.
Gruß Daniel
AW: Application.Caller
30.03.2017 15:11:04
Ingo
Hallo Fennek,
erst einmal vielen Dank für Deine super schnelle Antwort.
Ich habe mir das gerade mal angeschaut bzw. kurz überflogen. Das scheint mir aber auf ein worksheet mit Spalten und Zeilen zu zielen. Nicht aber auf eine UserForm - oder mache ich da gerade einen Denkfehler?!
Ein Bsp, welches mein Problem ganz gut beschreibt (nur halt mit Checkboxen) habe ich hier gefunden:
https://www.herber.de/forum/archiv/1016to1020/1017714_ApplicationCaller.html
Nur wird auch hier für jede Checkbox die Ereignisprozedur als Trigger verwendet. Das versuche ich zu vermeiden, da ich sonst 50x untereinander
Sub TextBox23_AfterUpdate()
Anweisung1
Anweisung2
etc.
End Sub

stehen hab. Mache ich da einen Denkfehler?
VG
Ingo
Anzeige
AW: Userform: Textfeld identifizieren
30.03.2017 15:08:36
Daniel
Hi
Profilösung: Klassenprogrammierung
Anfängerlösung:
1. schreibe die Aktionen, die bei einer Änderung in einem der Textfelder laufen soll, in ein eigenes Makro in der Userform.
in diesem Makro kannst du mit ActiveControl auf das gerade aktive Control zugreifen und z.B. mit ActiveControl.Name dessen Namen abfragen um dies im Code zu verwenden
2. erstelle für jede TextBox das AfterUpdate-Event, hier reicht es aber aus, das unter 1. erstellte Marko einfach aufzurufen, so dass der Code für alle TextBoxen gleich ist und sich nur der Makroname ändert.
Beispiel:
Sub TextBox23_AfterUpdate()
Call MakroBeiTextboxÄnderung
end Sub
Sub TextBox24_AfterUpdate()
Call MakroBeiTextboxÄnderung
end Sub
Sub TextBox25_AfterUpdate()
Call MakroBeiTextboxÄnderung
end Sub
Sub MakroBeiTextboxÄnderung()
Msgbox ActiveControl.Name
end Sub
Gruß Daniel
Anzeige
Profilösung funktioniert auch nicht...
30.03.2017 15:34:58
EtoPHG
Daniel,
Denn das _AfterUpdate Event, lässt sich nicht in einer Textbox-Klasse unterbringen!
Bei 50 Textboxen auf einer Userform, liegt IMHO ein falscher Lösungs-/Design-Ansatz vor!
Gruess Hansueli
AW: Profilösung funktioniert auch nicht...
30.03.2017 15:37:30
Daniel
für die Klassen Programmierung wird dann ja hoffentlich auch ein geeignetes ähnliches Event zur Verfügung stehen.
und bei 50 Eingabefeldern sollte man sich überlegen, ob man das ganze nicht einfach in einem Tabellenblatt mit Excelzellen macht.
Gruß Daniel
Nein, es steht kein geeignets Event z.V. (owT)
30.03.2017 15:57:46
EtoPHG

AW: Nein, es steht kein geeignets Event z.V. (owT)
30.03.2017 16:44:39
Ingo
Vielen Dank, Daniel.
Ich hatte gehofft, mir die ganze Schreiberei sparen zu können. Dennoch vielen Dank für Deine kompetente Unterstützung :-)
VG und (bald) ein schönes WE
Ingo
Anzeige
AW: Nein, es steht kein geeignets Event z.V. (owT)
30.03.2017 16:49:35
Daniel
naja, wenn du über das ActiveControl nur noch ein Ausführungsmarko brauchst, dann hat sich die Schreiberei ja schon stark vereinfacht.
Die AfterUpdate-Makros sind dann ja bis auf den Namen alle gleich und wenn du clever bist, kannst du dir diesen Teil des Codes auch makro- oder Formelunterstützt auf einem Tabellenblatt erstellen und von dort ins Codefenster übernehmen.
Gruß Daniel
AW: Nein, es steht kein geeignets Event z.V. (owT)
30.03.2017 16:54:40
Ingo
Ja, in der Tat wird das mit den Makros keine große Sache mehr sein. Mir ging's im Wesentlichen um die gut 50 AfterUpdate-Events. Aber dafür gibt's aktuell keine Lösung und dann ist das auch OK.
VG, Ingo
Anzeige
AW: Profilösung funktioniert auch nicht...
30.03.2017 15:41:29
Ingo
Hallo EtoPHG (Hansueli),
Grundsätzlich denke ich schon, dass das Design i. O. ist. Alle Eingabefelder gehören thematisch zusammen. Eine Verteilung auf andere UF würde den Überblick verschlechtern.
Natürlich könnte ich auch einige TextBoxen auf andere UF verteilen, damit hätte ich aber nichts gewonnen, sondern nur das Problem verlagert.
VG
Ingo
50 Textboxen vs. 17'179'869'184 Zellen/Blatt (owT)
30.03.2017 15:57:01
EtoPHG

AW: einfacher: Command-Button
30.03.2017 15:28:52
Fennek
Hallo,
wenn man auf der user-Form einen Commandbutton anlegt, reicht dieser Code:

private sub CommandButton1_Click()
for each f in me.controls
if typeof f is msforms.textbox then debug.print f.value
next f
mfg
Anzeige
...und was zum Teufel trägt dieser Code
30.03.2017 15:36:22
EtoPHG
zur Frage/Lösung bei? Fennek!
Gruess Hansueli

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige