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

SetFocus

SetFocus
24.08.2020 16:35:23
Rainer
Ich möchte in einem Formular zwei Werte aus zwei Textfeldern multiplizieren. Die eingegebenen _
Werte sollen geprüft werden: Feld1: kein Text, kein Dezimalzeichen (Punkt oder Komma); Feld 2: _
kein Text, kein Dezimalpunkt. Feld 1 soll beim Verlassen (Exit) auf Korrektheit geprüft werden. _ Leider wird der SetFokus-Befehl ignoriert, und ich habe keine Ahnung, warum. Hier der Code:

Private Sub txtFaktor1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Integer
Dim iFaktor1 As Integer
If InStr(txtFaktor1.Value, ".")  0 Or InStr(txtFaktor1.Value, ",")  0 Then
MsgBox "In diesem Feld bitte nur ganze Zahlen eingeben!", , "Eingabefehler"
i = Len(txtFaktor1.Value)
With txtFaktor1
.SelStart = 0
.SelLength = i
.SetFocus
End With
Exit Sub
End If
If IsNumeric(txtFaktor1.Value) = False Then
MsgBox "Hier bitte nur Zahlen eingeben!", , "Eingabefehler"
i = Len(txtFaktor1.Value)
With txtFaktor1
.SelStart = 0
.SelLength = i
.SetFocus
End With
Exit Sub
End If
iFaktor1 = CInt(txtFaktor1.Value)
End Sub

Ich war lange nicht hier, erinnere mich aber an einige Koryphäen (Geist ist geil), die vielleicht einen Tip haben.
Danke für Hilfe

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

Betreff
Datum
Anwender
Anzeige
AW: SetFocus
24.08.2020 16:48:08
Nepumuk
Hallo Rainer,
teste mal:
Private Sub txtFaktor1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim iFaktor1 As Integer
    If InStr(txtFaktor1.Text, ".") <> 0 Or InStr(txtFaktor1.Text, ",") <> 0 Then
        MsgBox "In diesem Feld bitte nur ganze Zahlen eingeben!", vbExclamation, "Eingabefehler"
        With txtFaktor1
            .SelStart = 0
            .SelLength = .TextLength
        End With
        Cancel = True
        Exit Sub
    End If
    If Not IsNumeric(txtFaktor1.Text) Then
        MsgBox "Hier bitte nur Zahlen eingeben!", vbExclamation, "Eingabefehler"
        With txtFaktor1
            .SelStart = 0
            .SelLength = .TextLength
        End With
        Cancel = True
        Exit Sub
    End If
    iFaktor1 = Cint(txtFaktor1.Text)
End Sub

Gruß
Nepumuk
Anzeige
AW: SetFocus
25.08.2020 17:42:44
Rainer
Hallo Nepomuk,
that's it, man. Vielen Dank, er setzt den Fokus jetzt wie gewünscht. Hast Du noch einen Tip für mich, wo ich falsch gedacht habe?
Beste Grüße aus Datteln
Rainer
AW: SetFocus
25.08.2020 17:49:18
Nepumuk
Hallo Rainer,
das Event wird ausgeführt nach dem verlassen der TextBox und bevor der Cursor im ausgewählten Control ankommt.
Gruß
Nepumuk
AW: SetFocus
24.08.2020 17:11:58
fcs
Hallo Rainer,
innerhalb der Ereignis-Prozeduren eines Steuerelements funktioniert SetFocus auf das Steuerelement selber nicht.
Bei unzulässigen Eingaben kann man Cancel auf True setzen. Dann bleibt der Focus auf dem Steuerlement.
Für die Prüfung der Eingaben ist es hier einfacher, wenn man die Eingabetasten -Werte prüft und nur 0 bis 9 zulässt.
ggf. in Eigenschaft "ControlTipText" der Textboxen einen entsprechenden Hinweis eintragen.
Wenn du die nummerischen Werte der Textboxen später verwenden willst, dann müssen die Variablen hier übergeordnet im Modul deklariert werden.
Beachte, dass Max.-Werte von Integer-Variablen 65536 sind. ggf. Variablen als Long deklarieren.
LG
Franz
'Variablen am Beginn des Userform-Code-Moduls deklarieren
Private iFaktor1 As Integer, iFaktor2 As Integer
Private Sub txtFaktor1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(txtFaktor1.Value) Then
iFaktor1 = CInt(txtFaktor1.Value)
Else
MsgBox "Hier bitte nur Zahlen eingeben!", , "Eingabefehler"
Cancel = True
End If
End Sub
Private Sub txtFaktor1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
'zulässige Eingaben
Case Else
'Eingabe negieren
KeyAscii = 0
End Select
End Sub
Private Sub txtFaktor2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(txtFaktor2.Value) Then
iFaktor2 = CInt(txtFaktor2.Value)
Else
MsgBox "Hier bitte nur Zahlen eingeben!", , "Eingabefehler"
Cancel = True
End If
End Sub
Private Sub txtFaktor2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Asc("0") To Asc("9")
'zulässige Eingaben
Case Else
'Eingabe negieren
KeyAscii = 0
End Select
End Sub

Anzeige
AW: SetFocus
25.08.2020 18:23:26
Rainer
Hallo Franz,
ganz herzlichen Dank für Deine Hilfe und vor allem auch für die weiterführende Information; daß SetFocus in der Ereignisprozedur nicht funktioniert war mir völlig unbekannt, aber so isses manchmal mit VBA.
Alles Gute aus Datteln
Rainer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige