PDA

Vollständige Version anzeigen : VBA Setfocus


Werner Joussen
25.01.2001, 14:07
ich benutze den vba-Befehl "SETFOCUS" um ein eingabefeld nach einer falscheingabe erneut zu aktivieren:

Private Sub txtEMail_AfterUpdate()
If InStr(txtEMail, "@") = 0 Or InStr(txtEMail, ".") = 0 Then
MsgBox ("Keine gültige EMail-Adresse")
txtEMail.SetFocus
Exit Sub
End If
....
End Sub
Der focus steht aber nach ablauf der prozedur immer im ersten Feld.
Was mache ich falsch?

Jan
25.01.2001, 15:59
das ereignis "after_update" findet vor dem ereignis "lostfocus" statt. das
heisst, dass deine aktion wirkungslos bleibt, weil du .SetFocus VOR dem (
nicht zu verhindernden ) ereignis "lostfocus" veranlasst.
ich sehe 2 möglichkeiten, dein problem zu lösen :

1) du setzt den von dir angegebenen code in den "gotfocus" - handler des
steuerelementes, das NACH "txtEMail" den focus erhält. jetzt ist .SetFocus
txtEMail richtig !

2) oft ist es günstig, den code für update-ereignisse in "before-update" zu
setzen. before-update heisst NICHT, dass du noch nichts in das feld
eingetragen hast! "before-update" bietet die möglichkeit, den zur prozedur gehörigen
parameter "Cancel" einzusetzen : ist deine gewünschte bedingung nicht erfüllt
- in deinem fall ist die mail-adresse nicht eingetragen - setzt du cancel auf
"True", und das ereignis "update" tritt NICHT ein !

also :
private Sub <name>_before_update(Cancel As Integer)
if bedingung nicht erfüllt then
Cancel = True ( referenziert integer - wert )
else
was anderes
endif
End Sub

ich hoffe, dass hilft dir,

jan