Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1348to1352
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
12.02.2014 13:13:16
Peter
Hallo Zusammen
Wieder einmal benötige ich Eure Hilfe
In einer UF sind mehere Textboxen nun möchte ich das in z.B. Textbox3 ein nummerischer Wert eingetragen wird. Sollte dies nicht der Fall sein soll eine Meldung erscheinen und die entsprechende Textbox editiert sein, so das mann dort sofort eine Eingabe machen kann.
Mit folgendem Code habe ich es Probiert. Aber SetFocus wird nicht ausgeführt.

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox3.Text) Then
Call Stärke
Label12.Caption = intStärkeGesamt
Exit Sub
End If
MsgBox "Sie müssen einen numerischen Wert eingeben!", vbInformation, "Fehler"
TextBox3.Value = 0
TextBox3.SetFocus
End Sub

Es wird die nächste Textbox editiert.
Dieser Code ist exemplarisch für weitere Textboxen.
Gruß
Peter

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SetFocus
12.02.2014 13:50:12
Peter
Hallo Harry
Danke für Deine Antwort.
Mit "If IsNumeric(TextBox3.Text) Then ......" lasse ich ja nur Zahlen zu.
Mein Problemm ist aber, dass die entsprechden Textbox sofor wieder editiert werden soll.
Damit der Anwender dort sofor eine Zahl eingeben kann.
Gruß
Peter

AW: SetFocus
12.02.2014 16:34:46
EtoPHG
Hallo Peter,
Statt TextBox3.SetFocus schreibst du ganz einfach Cancel = True
Gruess Hansueli

AW: SetFocus
12.02.2014 16:50:00
Matze
Hi HansUli,
ich mach eigentlich immer erst klar falls NICHT Bedingung erfüllt wird
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsNumeric(TextBox3.Text) Then
MsgBox "Sie müssen einen numerischen Wert eingeben!", vbInformation, "Fehler"
TextBox3.Value = "" ' anstelle 0 denn das ist eine Zahl!!
Cancel = True
Else
Call Stärke
Label12.Caption = intStärkeGesamt
End If
End Sub
Matze

Anzeige
AW: SetFocus
13.02.2014 10:45:36
Peter
Hallo Hansueli, hallo Matze
Danke für Eure Antwort.
Leider ist dies noch nicht so wie ich es mir erhofft hatte.
Der Text in der Textbox3 wird zwar gelöscht aber, und das ist für mich wichtig, der Cursor ist nicht in der Textbox3.
Dies ist deshalb wichtig, den wenn der Benutzer die Fehlermeldung im Eifer des Gefechtes einfach wegklickt und dann weiter arbeitet, fehlt mir eventuell diese wichtige Eingabe. Wenn der Corsor aber in der Textbox blinkt wird der Benutzer darauf aufmerksam gemacht und er kann erst dann die UF weiter ausfüllen, wenn ein korrekter Wert eingetragen ist.
Gibt es noch eine andere Möglichkeit?
Viele Grüße
Peter

Anzeige
AW: SetFocus
13.02.2014 11:13:10
Matze
Hallo Peter,
mal ein Beispiel wie es in einem meiner Projekte gemacht ist..
'TAG auf Nummerisch prüfen - in Eigenschaften max Länge 2 einstellen
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsNumeric(ChrW(KeyAscii)) Then KeyAscii = 0
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'TAG
Me.ToPersonZwei.Enabled = False ''Ist ein Button zum weiterschalten in eine weitere UF
If fncCheckTextboxEmpty(Me.TextBox3, "Tag") Then 'Prüffunktion ob TB3 leer ist (eigene  _
Funktion in einem Modul
Cancel = True
'Es folgen weitere Prüfungen
ElseIf fncEingabeDatum(strJahr:=Me.TextBox5, strMonat:=Me.TextBox4, strTag:=Me.TextBox3) = 4  _
Then
Cancel = True
Else
Me.ToPersonZwei.Enabled = fncCheckEingaben 'Den Weiterschaltbutton einschalten wenn eine  _
Eingabe gemacht wurde
End If
Me.TextBox3 = Format(TextBox3, "00") 'Das Format der eingegebenen Zahl
End Sub
In ein Modul NameModul_Public (das kann dann auf Alle Ufs angewendet werden)
Option Explicit
'####  FUNKTION:    Prüfung Textbox        ####
Public Function fncCheckTextboxEmpty(objTextbox As Object, _
Optional strMsgTitel As String = "Prüfung ob Textbox leer") As Boolean
'Prüfung ob Textbox in einer Userform leer ist
'strMsgTitel= optinaler Parameter für den Titeltext der Messagebox
If objTextbox.Value = "" Then 'empty ?
fncCheckTextboxEmpty = True
'Meldung wenn nicht gefüllt
MsgBox "Eingabe ist erforderlich", vbInformation + vbOKOnly, strMsgTitel
End If
End Function

Versuch mal dein Glück, ansonsten stell dein Projekt oder ein Beispiel deiner UF hier ein.
Matze

Anzeige
AW: SetFocus
13.02.2014 11:22:31
EtoPHG
Hallo Peter,
Bitte lade eine Beispielmappe ins Forum, in der das so (falsch) funktioniert, wie du es beschreibst.
Wenn die Variable Cancel auf True in einem _Exit Ereignis gesetzt wird, dann behält das Steuerelement den Fokus, welches das Ereignis ausgelöst hat. Per Default ist Cancel auf False und damit wird nach dem Ereignis der Focus an das nächste (TabIndex) Steuerelement übergeben. Ich behaupte, dass mein Änderungsvorschlag funktioniert und wäre darum an deinem Beispiel interessiert!
Gruess hansueli

AW: SetFocus - TextBox3.Value = ""
13.02.2014 11:49:58
Matze
Hallo Hans-Uli,
ich vermute mal er hat noch diese
TextBox3.Value = 0 'Zeile eingebaut , somit währe die Prüfung auf numerisch True
nutze
TextBox3.Value = "" 'oder sehe ich das falsch?
Matze

Anzeige
AW: SetFocus
13.02.2014 12:10:57
Peter
Hallo hansueli, hallo Matze
Hier mal eine Beispielmappe.
Anmerkung: Das Projekt ist noch nicht ganz fertig.
https://www.herber.de/bbs/user/89267.xlsm
Viele Grüße
Peter

AW: SetFocus
13.02.2014 12:47:28
Matze
Hallo Peter,
im Projekt sind mehrere Fehler. Ich habe ab jetzt keine Zeit mehr, erst wieder heute Abend.
@HansUli, würdest du bitte weitermachen du bist der Profi.
Die Eingabe Ganzer Zahlen macht auch Fehler mit "Sub stärke"
Diese Sub stärke steht in der UF ?
TextBoxen auf einer Uf mit Me.Textbox.. ansprechen oder mit der UF die gemeint ist
UserForm11.Textbox1
Nundenn, HansUli , hau rein,...
Matze

Anzeige
AW: Das liegt an...
13.02.2014 14:30:45
hary
Moin
Du hast die UserFormeigenschaft ShowModal auf false. Mit True klappt es.
Wie man das umschifft weiss ich nicht.
gruss hary

AW: SetFocus
13.02.2014 14:50:06
EtoPHG
Hallo Peter,
Es ist so wie hary sagt. Das Problem liegt in der Tatsache, dass die UF nonmodal ist. Dadurch kommt die Kontrolle der Fenster durch die Msgbox aus dem Takt (versteckter Hinweis "Fenster-Aktivierungsreihenfolge" in der Hilfe zu ShowModal). Da du das aber brauchst (für deine Datums-UF), mache ich folgenden "Workaround"-Vorschlag:
1. Zeichne ein Label auf die UF (egal wo, kann auch über den anderen Steuerlementen liegen!), das so gross ist, dass es deine Fehlermeldungstexte aufnehmen kann. Vielleicht noch gelber Hintergrund und rote, fette Schrift ;-)
2. Benenne es errLabel und setze seine Visible Eigenschaft auf False
3. Füge diesen Code in deine Userform
Sub MsgboxL(Optional sMsg As String = "")
With errLabel
.Top = ActiveControl.Top + ActiveControl.Height + 2
.Left = ActiveControl.Left
.Caption = sMsg
.Visible = (Len(sMsg) > 0)
End With
End Sub
und 4. Passe die Textbox-Codes nach diesem Schema an:
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MsgboxL
If Not IsNumeric(TextBox3.Text) Then
MsgboxL "Sie müssen einen numerischen Wert eingeben!"
TextBox3.Value = "" ' anstelle 0 denn das ist eine Zahl!!
Cancel = True
Else
Call Stärke
Label12.Caption = intStärkeGesamt
End If
End Sub
Das Label wird jetzt mit dem "Fehlertext" unter dem Steuerelement angezeigt und ausgeblendet, wenn es ohne Parameter aufgerufen wird.
Gruess Hansueli

Anzeige
AW: SetFocus / ERLEDIGT
13.02.2014 15:29:50
Peter
Hallo Hansueli, hallo Matze, hallo Harry
Erstmals vielen Dank für Eure Hilfe.
Nach einigen hin und her bin ich jetzt davon Überzeugt, dass ich mit dem "Cancel = True" auskommen kann.
Da ja nach der Fehlermeldung der Benutzer erst in der entsprechenden Textbox eine korrekte eingabe machen muss um weiter machen zu können.
Ich werde hier in der Fehlermeldung einfach nochmals das entsprechende Textfeld angeben.
Also vielen Dank und viele Grüße
Peter

AW: SetFocus / ERLEDIGT
13.02.2014 15:46:20
Matze
teste doch das hier:
Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsNumeric(ChrW(KeyAscii)) Then KeyAscii = 0
End Sub
Deine Prüfung auf Cint warum eigentlich? Sollen Anzahl Teilnehmer sein in der Textbox3?
Deine Laufende Nr scheint mir auch irgendwie wo was doppelt zu laufen
wie gesagt heute Abend erst wieder
Matze

Anzeige
Da läuft wirklich einiges nicht korrekt,..
13.02.2014 23:20:09
Matze
Hallo Peter,
und ich brauche wenn ich das alles durchsehen soll doch wohl länger als einer der Profis hier.
- die Laufende Nr. wenn die UF gestartet wird und du nix in die Felder eingibst zählt falsch
- da müsste Prüfung rein welche Daten eingegeben werden müssen, quasi welche Felder Pflicht sind.
- in der UF2 wird das Datum zwar in TB1 eingetragen erhält aber eine falsche Formatierung
- usw,.. willst du diese Kalendergeschichte als nettes Gymic behalten oder lieber gleich ein korrektes Datum eingeben.
- Die TL1,TL2,Tl3 werden da Ganzahlen eingegeben?
- Muss die Summe in der UF erscheinen, reicht es nicht wenn die Zelle das Ergebnis direkt listet.
hab das jetzt echt nur kurz angeschaut, und vermute mal das zu diesem Projekt noch mehr dazu kommt.
Bist du denn der selbe "Peter" User mit dem Beitrag hier: https://www.herber.de/forum/messages/1349531.html
Wenn ja, soll das bestimmt hier auch eingebaut werden oder?
Mal sehen was ich erreichen kann,
Gruß Matze

Anzeige
AW: Da läuft wirklich einiges nicht korrekt,..
14.02.2014 08:51:34
Peter
Hallo Matze
Vielen Dank für Deine Mühe,
aber ich bin nicht der Peter in Deinem Link.
Die lfdNr wir in der UF angezeigt und aus der Tabelle geholt. Dies funktioniert seither prima. Auch in anderen Projekten.
Das Datum wird genauso formatiert wie ich es benötige. Den hier soll der Benutzer ein Datum in gewohnter Schreibweise eintragen oder aus dem Kalender auswählen.
In den TL1 - TL3 werden nur ganze Zahlen eingeben.
Viele Grüße
Peter (HPO)

Dann teste mal,..ob dir das so reicht,...
14.02.2014 09:37:03
Matze
Hallo Peter,
...hab nur Änderungen an den TB3,4,5 vorgenommen.
Wenn TB5 verlassen wird (ExiT) dann berechnet er die Summe des Labels12
Das Sub Stärke ist raus.
https://www.herber.de/bbs/user/89281.xlsm
MfG Matze

AW: Dann teste mal,..ob dir das so reicht,...
14.02.2014 10:12:19
Peter,
Hallo Matze
Danke für Deine Arbeit.
- wird ein Buchstabe eingetragen, wird der Wert 0 eingetragen und der Benutzer wird nicht darauf
aufmerksamt gemacht, dass er eine Falsche eingabe gemacht hat.
- die Berechung wird erst durchgeführt, wenn der Benutzer die TB5 verlässt. Sollter der Benutzer aber
keine eingabe in TB5 machen wir nicht berechnet. Dies ist dann der Fall wenn ich eine 0 vorgebe und
der Benutzer tatsächlich keine eingabe machem muß.
diese Punkte sind mir aufgefallen und müssten geändert werden.
Viele Grüße
Peter (HPO)

AW: Dann teste mal Version 2
14.02.2014 23:26:14
Matze
Hallo Peter,
auch in der ersten Version sowie wie jetzt in dieser konntest du keine Buchstaben in TB3,4,5 eingeben.
..so nun hab ich für die TextBoxen 3,4,5 die selben Prozeduren angelegt.
Die Summe Im Label wird somit beim verlassen der Boxen berechnet.
case 44 hab ich rausgenommen da du ja keine Kommazahlen eingibst.
somit ist das Thema erledigt.
Matze

AW: Glatt die Datei vergessen,..rofl...
17.02.2014 10:17:51
Peter
Hallo Matze
DANKE
Gruß
Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige