ich habe ein wenig mit den Events experimentiert, die im VBA Editor für UserForm Elemente angeboten werden. In diesem Fall für ein RefEdit Feld. Ich möchte nicht erst auf Button Click die Richtigkeit einer RefEdit Selektion prüfen, sondern schon eher und automatisch.
Zwei Dinge kommen in Frage: Change und Exit.
Private Sub RefEdit_Test1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Private Sub RefEdit_Test1_Change()
If Range(RefEdit_Test1.Text).PivotField.Orientation xlRowField Then
MsgBox "Startfeld muß ein Feld aus dem Zeilenbereich sein!"
RefEdit_Test1.Value = ""
RefEdit_Test1.SetFocus
Else
debug.print = Range(RefEdit_Test1.Text).PivotField.Position
End If
End Sub
Als ich mit Change gestestet habe, ist mir Excel des Öfteren abgestürzt. Grund unbekannt. Überdies war unvorteilhaft, daß die Messagebox sehr häufig kommt. Auch wenn ich meinen Fehler der falschen Selektion bemerkte und korrigierte. Change ist für die praktische Anwendung in diesem Fall zu empfindlich.
Also ist Exit meine Präferenz als auslösendes Element. Aber: Die SetFocus Anweisung funktioniert nicht korrekt. Wenn auf Exit (Enter drücken) die Prüfung negativ verläuft und die Messagebox kommt, wird der Wert von RefEdit_Test1 wie im Code hinterlegt auf gesetzt, aber der Focus liegt nicht auf diesem RefEdit Feld, sondern auf dem nächsten Feld entsprechend der Aktivierreihenfolge.
Warum greift SetFocus beim Change Event, jedoch nicht bei Exit.
Welchen Befehl kann ich optional noch verwenden, um den Focus nach Fehlerhafter Eingabe wieder auf/ in das RefEdit Feld zu bringen?
Vielen Dank für Eure Ideen.
Grüße, Andreas Hanisch