Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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

Lost Focus

Lost Focus
13.03.2017 12:37:04
Rosenfeld
Hallo zusammen,
ich habe in einer UserForm an eine TextBox (Klassenmodul) einen Code gebunden, der mit dem Change-Ereignis ausgeführt wird; also auch beim Verlassen dieser Textbox.
Wie muss ich es anstellen, dass eine Teilaktion nur beim Verlassen ausgeführt wird?
Das Exit-Ereignis steht ja in einem Klassenmodul nicht zur Verfügung.
Gruß
Siegfried

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lost Focus
13.03.2017 13:38:38
Daniel
Hi
welche Events stehen denn im Klassenmodul zur Verfügung?
Ist da eines dabei, welches beim Verlassen ausgeführt wird?
ansonsten würden mir da diese Workarounds einfallen:
- normale TextBox verwenden und keine eigene Klasse
- wenn es ein Steuerelement gibt, welches normalerweise nach der Eingabe in die TextBox angeklickt wird, diesen Codeteil dort ausführen.
für den zweiten Workaround würde mir folgende Variante einfallen, wenn es kein eindeutiges "Folge-Steuerelement gibt":
lasse den Codeteil im MouseMove-Event der Userform ausführen. Dieses Event wird immer ausgeführt, wenn du die Maus über der Userform bewegst und zum nächsten Steuerelement wechselst.
Damit der Codeteil nicht permanent ausgeführt wird sondern nur einmal, erstellst du eine Modulweit gültige boolsche Variable (z.B. blnTeilaktionAusführen)
diese Variable setzt im ChangeEvent der TextBox auf True.
im MouseMove der Userform fragst du diese Variable ab und führst die Teilaktion aus, wenn die Variable = True ist. Dann setzt du die Variable = False.
dh als Code etwa so (nur Prinzip-Code,nicht kopieren):
Option Explicit
dim blnTeilaktionAusführen as Boolean
Private Sub TextBox_change()
blnTeilaktionAusführen = True
End Sub
Private Sub Userform1_MouseMove(...)
if blnTeilaktionAusführen Then
... Code der Teilaktion
blnTeilaktionAusführen = False
End if
end Sub
hat leider die Einschränkung, dass das nicht funktioniert, wenn der Anwender die TextBox mit der Tastatur verlässt (Tab, Enter), oder wenn die Steuerlemente so dicht liegen, dass die Maus gar nicht über dem Userformgrund bewegt wird sondern sofort über dem nächsten Steuerelement.
Gruß Daniel
Anzeige
AW: Lost Focus
13.03.2017 14:01:05
Rosenfeld
Hi Daniel,
vielen Dank für Deine Ideen.
Aber:
1. In dem Klassenmodul habe ich nur das Change-Ereignis.
2. Wenn ich alle Textboxen dieser Klasse in Anspruch nehmen muss, gibt es kein eindeutiges Folgeelement.
3. Aus praktischen Gründen kommt das Verlassen der Textbox nur über "Tab/Enter" in Frage.
4. Ich will bewusst über ein Klassenmodul arbeiten.
Mit den Ausführungen zu Lost Focus in der Hilfe kann ich nichts anfangen, dazu sind meine Kenntnisse zu bescheiden.
Dennoch Danke bis hierher.
Gruß
Siegfried
AW: Lost Focus
13.03.2017 14:21:34
Daniel
Hi
wenn du nur das Change-Event zur verfügung hast und die TextBox nur über TAB oder ENTER verlassen werden soll, könntest du so vorgehen:
1. setzte die Eigenschaften EnterKeyBehaviour, TabKeybeaviour und Multiline auf True
2. überprüfe im Change-Event, ob dein Text die Zeichen für TAB oder Zeilenumbruch enthält.
Wenn ja, führe die Teilaktion aus und setze danach den Focus auf das nächste Steuerlement.
Das Setzen der Eigenschaften ist notwendig, damit der Anwender TAB oder ENTER in die TextBox eingeben kann.
um festzustellen, ob ENTER oder TAB eingegeben wurden, nimmst du diesen Code im Change-Event der TextBox:
If InStr(TextBox1.Text, vbLf) > 0 Or InStr(TextBox1.Text, vbTab) > 0 Then
Gruß Daniel
Anzeige
AW: Lost Focus
13.03.2017 15:15:49
Rosenfeld
Hi Daniel,
mit Deinem Code "If InStr(...
funktioniert das bei mir wie gewollt, ohne dass ich Enter Key oder Tab Key umstellen muß.
Vielen Dank
Gruß
Siegfried
AW: Lost Focus
13.03.2017 15:23:43
Daniel
na dann um so bessser
ich bin davon ausgegangen, dass bei Druck auf einer der beiden Tasten sofort das nächste Steuerelement aktiviert wird, ohne dass das Change-Event nochmal anspringt.
Ich hatte allerdings nur mit normalen TextBoxen im Tabellenblatt ohne Klassenprogrammierung getestet.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige