Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1644to1648
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
Prüfung der Textboxen
13.09.2018 17:24:37
Peter
Hallo ihr Excelspezialisten,
ich habe mir einen Code in einer UF gebastelt, auf der Grundlage einer Vorlage im Archiv. Diese Prüfung funktioniert soweit sehr gut.
Mein Problem ist aber, dass ich nicht nur die Prüfung möchte, sondern wenn ein Fehler auftaucht und dieser beseitigt wurde, dass dann die Prüfung weiter geht bzw. wieder von vorne los geht.
Ist so etwas praktikabell und lässt sich dies machen?
Ich nehme an irgendwie mit einer Schleife.
Besten Dank für eure Hilfe.
Gruss
Peter

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
lässt sich dies machen? ---> geht bestimmt ... owT
13.09.2018 17:42:06
Matthias
AW: lässt sich dies machen? ---> geht bestimmt ... owT
13.09.2018 17:47:01
Peter
Hallo Matthias,
mit diesem Button geht die Prüfung los:
Private Sub CommandButton1_Click()
'1. Prüfung Datum
Call CheckDatum(TextBox1)
'2. Prüfung Tgb.-Nr.
Call CheckTgbNr(TextBox2)
'3. Prüfung Vorgang1
Call CheckVorgang1(TextBox3)
'4. Prüfung Vorgang2
Call CheckVorgang2(TextBox4)
'5. Prüfung Einnahmen
Call CheckEinnahmen(TextBox5)
'6. Prüfung Ausgaben
Call CheckAusgaben(TextBox6)
'7. Prüfung Hauptkonten
Call CheckHauptkonten(TextBox8)
'8. Prüfung Unterkonten
Call CheckUnterkonten(TextBox11)
End Sub

und die nachstehenden Codes prüfen die Textboxen:
Option Explicit
Sub CheckDatum(objTB As Object)
If Not IsDate(objTB) Then _
MsgBox "Kein Datum in " & objTB.Name
End Sub
Sub CheckTgbNr(objTB As Object)
If (objTB) = "" And UserForm3_TB_prüfen.Label17 = "" Then
' MsgBox "keine Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox2 = "" And UserForm3_TB_prüfen.Label17 > "" Then
MsgBox "Bitte Tbg.-Nr. eintragen" ', vbInformation + vbOKOnly, "Erfassung wird gesendet"
objTB.SetFocus
End If
End Sub
Sub CheckVorgang1(objTB As Object)
If (objTB) > "" And UserForm3_TB_prüfen.Label18 = "" Then
' MsgBox "kein Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox3 = "" Then
MsgBox "Bitte Vorgang1 eintragen" ', vbInformation + vbOKOnly, "Erfassung wird gesendet"
objTB.SetFocus
End If
End Sub
Sub CheckVorgang2(objTB As Object)
If (objTB) = "" And UserForm3_TB_prüfen.Label19 = "" Then
' MsgBox "kein Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox4 = "" And UserForm3_TB_prüfen.Label19 > "" Then
MsgBox "Bitte Vorgang2 eintragen" ', vbInformation + vbOKOnly, "Erfassung wird gesendet"
objTB.SetFocus
End If
End Sub Sub CheckEinnahmen(objTB As Object)
If (objTB) > "" And UserForm3_TB_prüfen.TextBox6 = "" Then
' MsgBox "kein Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox5 = "" And UserForm3_TB_prüfen.TextBox6 = "" Then
MsgBox "Bitte Einnahmen eintragen" ', vbInformation + vbOKOnly, "Erfassung wird gesendet"
objTB.SetFocus
End If
End Sub
Sub CheckAusgaben(objTB As Object)
If (objTB) > "" And UserForm3_TB_prüfen.TextBox5 = "" Then
' MsgBox "kein Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox6 = "" And UserForm3_TB_prüfen.TextBox5 = "" Then
MsgBox "Bitte Ausgaben eintragen" ', vbInformation + vbOKOnly, "Erfassung wird gesendet"
objTB.SetFocus
End If
End Sub
Sub CheckHauptkonten(objTB As Object)
Dim wert As String
Dim eWert As Object
wert = UserForm3_TB_prüfen.TextBox11
'MsgBox Application.CountIf([G2:G20], "*1*")
'MsgBox Application.CountIf([G2:G20], wert)
wert = Application.CountIf([G2:G20], wert)
If (objTB) > "" And UserForm3_TB_prüfen.TextBox10 = "" And UserForm3_TB_prüfen.TextBox11 > "" Then
' MsgBox "kein Wert erforderlich"
MsgBox "Hauptkonto gewählt, Unterkonto vorhanden - bitte Unterkonto eintragen!"
UserForm3_TB_prüfen.ComboBox2.SetFocus
ElseIf UserForm3_TB_prüfen.TextBox8 = "" And UserForm3_TB_prüfen.TextBox10 = "" Then
MsgBox "Bitte Hauptkonto eintragen" ', vbInformation + vbOKOnly, "Erfassung wird gesendet"
' objTB.SetFocus 'nicht möglich da gesperrt
End If
End Sub
Sub CheckUnterkonten(objTB As Object)
Dim wert As String
Dim eWert As String
If (objTB) > "" And UserForm3_TB_prüfen.TextBox10 > "" Then
' MsgBox "kein Wert erforderlich"
MsgBox "beide Werte vorhanden - CmdButton öffnen und SetFocus"
UserForm3_TB_prüfen.CommandButton3.Enabled = True
UserForm3_TB_prüfen.CommandButton3.SetFocus
UserForm3_TB_prüfen.CommandButton3.BackColor = &HC0FFC0
' ElseIf UserForm3_TB_prüfen.TextBox8 = "" And UserForm3_TB_prüfen.TextBox10 = "" And UserForm3_TB_prüfen.TextBox11 = "" Then
ElseIf UserForm3_TB_prüfen.TextBox9 > "" And UserForm3_TB_prüfen.TextBox10 = "" And UserForm3_TB_prüfen.TextBox11 = "" Then
MsgBox "prüfen ob ein Unterkonto für das Hauptkonto existiert"
wert = UserForm3_TB_prüfen.TextBox9
eWert = Application.CountIf([G2:G20], wert)
If UserForm3_TB_prüfen.TextBox11 = "" And eWert = 1 Then
MsgBox "vorhanden - bitte Unterkonto auswählen"
UserForm3_TB_prüfen.ComboBox2.SetFocus
ElseIf UserForm3_TB_prüfen.TextBox11 = "" And eWert = 0 Then
MsgBox "nicht vorhanden - CmdButton öffnen und SetFocus"
End If
End If
End Sub Muss ich diese Codes in einen zusammenfassen und was dann?
Kannst Du mir bitte helfen?
Gruss
Peter
Anzeige
AW: lässt sich dies machen? ---> geht bestimmt ... owT
13.09.2018 23:35:19
fcs
Hallo Peter,
wandle die Subs, die die Textboxen prüfen in Functions um, die True zurückgeben, wenn der Inhalt der Textboxen in Ordnung ist und False, wenn er nicht korrekt ist.
Bei False wird dann die per Commandbutton1 gestartete Prüfroutine im jeweiligen Prüfschritt verlassen.
Gruß
Franz
Option Explicit
Private Sub CommandButton1_Click()
'1. Prüfung Datum
If CheckDatum(TextBox1) = False Then Exit Sub
'2. Prüfung Tgb.-Nr.
If CheckTgbNr(TextBox2) = False Then Exit Sub
'3. Prüfung Vorgang1
If CheckVorgang1(TextBox3) = False Then Exit Sub
'4. Prüfung Vorgang2
If CheckVorgang2(TextBox4) = False Then Exit Sub
'5. Prüfung Einnahmen
If CheckEinnahmen(TextBox5) = False Then Exit Sub
'6. Prüfung Ausgaben
If CheckAusgaben(TextBox6) = False Then Exit Sub
'7. Prüfung Hauptkonten
If CheckHauptkonten(TextBox8) = False Then Exit Sub
'8. Prüfung Unterkonten
If CheckUnterkonten(TextBox11) = False Then Exit Sub
End Sub
'und die nachstehenden Codes prüfen die Textboxen:
Option Explicit
Function CheckDatum(objTB As Object) As Boolean
CheckDatum = True
If Not IsDate(objTB) Then _
MsgBox "Kein Datum in " & objTB.Name
CheckDatum = False
End If
End Function
Function CheckTgbNr(objTB As Object) As Boolean
CheckTgbNr = True
If (objTB) = "" And UserForm3_TB_prüfen.Label17 = "" Then
' MsgBox "keine Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox2 = "" And UserForm3_TB_prüfen.Label17 > "" Then
MsgBox "Bitte Tbg.-Nr. eintragen" ', vbInformation + vbOKOnly, _
"Erfassung wird gesendet"
CheckTgbNr = False
objTB.SetFocus
End If
End Function
Function CheckVorgang1(objTB As Object) As Boolean
CheckVorgang1 = True
If (objTB) > "" And UserForm3_TB_prüfen.Label18 = "" Then
' MsgBox "kein Wert erforderlich"
ElseIf UserForm3_TB_prüfen.TextBox3 = "" Then
MsgBox "Bitte Vorgang1 eintragen" ', vbInformation + vbOKOnly, _
"Erfassung wird gesendet"
CheckVorgang1 = False
objTB.SetFocus
End If
End Function
Function CheckVorgang2(objTB As Object) As Boolean
CheckVorgang2 = True
If (objTB) = "" And UserForm3_TB_prüfen.Label19 = "" Then
' MsgBox "kein Wert erforderlich"
'CheckVorgang2 = False
ElseIf UserForm3_TB_prüfen.TextBox4 = "" And UserForm3_TB_prüfen.Label19 > "" Then
MsgBox "Bitte Vorgang2 eintragen" ', vbInformation + vbOKOnly, _
"Erfassung wird gesendet"
CheckVorgang2 = False
objTB.SetFocus
End If
End Function
Function CheckEinnahmen(objTB As Object) As Boolean
CheckEinnahmen = True
If (objTB) > "" And UserForm3_TB_prüfen.TextBox6 = "" Then
' MsgBox "kein Wert erforderlich"
'CheckEinnahmen = False
ElseIf UserForm3_TB_prüfen.TextBox5 = "" And UserForm3_TB_prüfen.TextBox6 = "" Then
MsgBox "Bitte Einnahmen eintragen" ', vbInformation + vbOKOnly, _
"Erfassung wird gesendet"
CheckEinnahmen = False
objTB.SetFocus
End If
End Function
Function CheckAusgaben(objTB As Object) As Boolean
CheckAusgaben = True
If (objTB) > "" And UserForm3_TB_prüfen.TextBox5 = "" Then
' MsgBox "kein Wert erforderlich"
'CheckAusgaben = False
ElseIf UserForm3_TB_prüfen.TextBox6 = "" And UserForm3_TB_prüfen.TextBox5 = "" Then
MsgBox "Bitte Ausgaben eintragen" ', vbInformation + vbOKOnly, _
"Erfassung wird gesendet"
CheckAusgaben = False
objTB.SetFocus
End If
End Function
Function CheckHauptkonten(objTB As Object) As Boolean
Dim wert As String
Dim eWert As Object
CheckHauptkonten = True
wert = UserForm3_TB_prüfen.TextBox11
'MsgBox Application.CountIf([G2:G20], "*1*")
'MsgBox Application.CountIf([G2:G20], wert)
wert = Application.CountIf([G2:G20], wert)
If (objTB) > "" And UserForm3_TB_prüfen.TextBox10 = "" _
And UserForm3_TB_prüfen.TextBox11 > "" Then
' MsgBox "kein Wert erforderlich"
MsgBox "Hauptkonto gewählt, Unterkonto vorhanden - bitte Unterkonto eintragen!"
CheckHauptkonten = False
UserForm3_TB_prüfen.ComboBox2.SetFocus
ElseIf UserForm3_TB_prüfen.TextBox8 = "" And UserForm3_TB_prüfen.TextBox10 = "" Then
CheckHauptkonten = False
MsgBox "Bitte Hauptkonto eintragen" ', vbInformation + vbOKOnly, _
"Erfassung wird gesendet"
' objTB.SetFocus 'nicht möglich da gesperrt
End If
End Function
Function CheckUnterkonten(objTB As Object) As Boolean
Dim wert As String
Dim eWert As String
CheckUnterkonten = True
If (objTB) > "" And UserForm3_TB_prüfen.TextBox10 > "" Then
' MsgBox "kein Wert erforderlich"
MsgBox "beide Werte vorhanden - CmdButton öffnen und SetFocus"
UserForm3_TB_prüfen.CommandButton3.Enabled = True
UserForm3_TB_prüfen.CommandButton3.SetFocus
UserForm3_TB_prüfen.CommandButton3.BackColor = &HC0FFC0
'ElseIf UserForm3_TB_prüfen.TextBox8 = "" And UserForm3_TB_prüfen.TextBox10 = "" _
And UserForm3_TB_prüfen.TextBox11 = "" Then
ElseIf UserForm3_TB_prüfen.TextBox9 > "" And UserForm3_TB_prüfen.TextBox10 = "" _
And UserForm3_TB_prüfen.TextBox11 = "" Then
MsgBox "prüfen ob ein Unterkonto für das Hauptkonto existiert"
wert = UserForm3_TB_prüfen.TextBox9
eWert = Application.CountIf([G2:G20], wert)
If UserForm3_TB_prüfen.TextBox11 = "" And eWert = 1 Then
MsgBox "vorhanden - bitte Unterkonto auswählen"
CheckUnterkonten = False
UserForm3_TB_prüfen.ComboBox2.SetFocus
ElseIf UserForm3_TB_prüfen.TextBox11 = "" And eWert = 0 Then
MsgBox "nicht vorhanden - CmdButton öffnen und SetFocus"
UserForm3_TB_prüfen.CommandButton3.Enabled = True
UserForm3_TB_prüfen.CommandButton3.SetFocus
UserForm3_TB_prüfen.CommandButton3.BackColor = &HC0FFC0
End If
End If
End Function

Anzeige
AW: wie komme ich in die nächste Prüfung
14.09.2018 08:09:40
Peter
Hallo Franz,
besten Dank für Deine Hilfe.
Die Prüfung mit Datum funktioniert soweit, dass das Programm stoppt, wenn keine Datum.
Wenn aber dann das Datum eingebaut ist, wie gelangt es dann zur nächsten Prüfung?
Gruss
Peter
AW: wie komme ich in die nächste Prüfung
14.09.2018 11:09:59
fcs
Hallo Peter,
nach einer Eingaben-Korrektur muss du jeweils das Test-Makro neu starten.
Alternativ könnte man auch alle Prüfungen durchführen und dann eine Sammelmeldung ausgeben. Dann wird es aber ggf. komplizier den Fokus auf eine falsch ausgefüllte Textbox zu setzen.
Ein anderer Weg wäre, evtl. das Exit-Ereignis der Textboxen zu nutzen um die Eingabe zu prüfen.
Bei korrekter Eingabe wird dann der Fokus auf die nächste Eingabe-Steuerelement gesetzt. Bei falscher Eingabe wir die Eingabe gecancelt und der Fokus bleibt auf der Textbox.
Der sinnvollste Ansatz für die Prüfung der Eingaben kann nur am lebenden Objekt erarbeitte werden.
Gruß
Franz
Anzeige
AW: wie komme ich in die nächste Prüfung
14.09.2018 18:34:51
Peter
Hallo Franz,
ich muss das ganze testen. Melde mich ggf. wieder.
Besten Dank für Deine Hilfe.
Gruss
Peter
AW: wie komme ich in die nächste Prüfung
15.09.2018 13:21:20
Peter
Hallo Franz,
ich habe jetzt Folgendes erstellt:
1. Commandbutton2 mit nachstehendem Code:
Private Sub CommandButton2_Click()
'1. Prüfung Datum
If CheckDatum(TextBox1) = False Then Exit Sub
'2. Prüfung Tgb.-Nr.
If CheckTgbNr(TextBox2) = False Then Exit Sub
'3. Prüfung Vorgang1
If CheckVorgang1(TextBox3) = False Then Exit Sub
'4. Prüfung Vorgang2
If CheckVorgang2(TextBox4) = False Then Exit Sub
'5. Prüfung Einnahmen
If CheckEinnahmen(TextBox5) = False Then Exit Sub
'6. Prüfung Ausgaben
If CheckAusgaben(TextBox6) = False Then Exit Sub
'7. Prüfung Bestand
If CheckBestand(TextBox7) = False Then Exit Sub
'8. Prüfung Hauptkonten
If CheckHauptkonten(TextBox8) = False Then Exit Sub
'9. Prüfung Hauptkonten-ID
If CheckHauptkontenID(TextBox9) = False Then Exit Sub
'10. Prüfung Unterkonten
If CheckUnterkonten(TextBox10) = False Then Exit Sub
'11. Prüfung UnterkontenID
If CheckUnterkontenID(TextBox11) = False Then Exit Sub
End Sub
sowie die dazugehörigen Funktionen:
Option Explicit
Function CheckDatum(objTB As Object) As Boolean
CheckDatum = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function Function CheckTgbNr(objTB As Object) As Boolean
CheckTgbNr = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckVorgang1(objTB As Object) As Boolean
CheckVorgang1 = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckVorgang2(objTB As Object) As Boolean
CheckVorgang2 = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckEinnahmen(objTB As Object) As Boolean
CheckEinnahmen = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckAusgaben(objTB As Object) As Boolean
CheckAusgaben = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckBestand(objTB As Object) As Boolean
CheckBestand = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
' objTB.SetFocus
End If
End Function
Function CheckHauptkonten(objTB As Object) As Boolean
CheckHauptkonten = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckHauptkontenID(objTB As Object) As Boolean
CheckHauptkontenID = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckUnterkonten(objTB As Object) As Boolean
CheckUnterkonten = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckUnterkontenID(objTB As Object) As Boolean
CheckUnterkontenID = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Jede einzelne für sich funktioniert.
Was ich jedoch benötige ist, dass wenn die TB vbgelb ist, dann Focus(enthalten) anhalten Wert einfügen und weiter zum Nächsten.
Am Ende, wenn alle grün sind Commandbutton1 auf enabled=True setzen.
Besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: wie komme ich in die nächste Prüfung
15.09.2018 17:48:20
Peter
Hallo Franz,
ich habe jetzt Folgendes erstellt:
1. Commandbutton2 mit nachstehendem Code:
Private Sub CommandButton2_Click()
'1. Prüfung Datum
If CheckDatum(TextBox1) = False Then Exit Sub
'2. Prüfung Tgb.-Nr.
If CheckTgbNr(TextBox2) = False Then Exit Sub
'3. Prüfung Vorgang1
If CheckVorgang1(TextBox3) = False Then Exit Sub
'4. Prüfung Vorgang2
If CheckVorgang2(TextBox4) = False Then Exit Sub
'5. Prüfung Einnahmen
If CheckEinnahmen(TextBox5) = False Then Exit Sub
'6. Prüfung Ausgaben
If CheckAusgaben(TextBox6) = False Then Exit Sub
'7. Prüfung Bestand
If CheckBestand(TextBox7) = False Then Exit Sub
'8. Prüfung Hauptkonten
If CheckHauptkonten(TextBox8) = False Then Exit Sub
'9. Prüfung Hauptkonten-ID
If CheckHauptkontenID(TextBox9) = False Then Exit Sub
'10. Prüfung Unterkonten
If CheckUnterkonten(TextBox10) = False Then Exit Sub
'11. Prüfung UnterkontenID
If CheckUnterkontenID(TextBox11) = False Then Exit Sub
End Sub
sowie die dazugehörigen Funktionen:
Option Explicit
Function CheckDatum(objTB As Object) As Boolean
CheckDatum = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function Function CheckTgbNr(objTB As Object) As Boolean
CheckTgbNr = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckVorgang1(objTB As Object) As Boolean
CheckVorgang1 = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckVorgang2(objTB As Object) As Boolean
CheckVorgang2 = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckEinnahmen(objTB As Object) As Boolean
CheckEinnahmen = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckAusgaben(objTB As Object) As Boolean
CheckAusgaben = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckBestand(objTB As Object) As Boolean
CheckBestand = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
' objTB.SetFocus
End If
End Function
Function CheckHauptkonten(objTB As Object) As Boolean
CheckHauptkonten = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckHauptkontenID(objTB As Object) As Boolean
CheckHauptkontenID = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckUnterkonten(objTB As Object) As Boolean
CheckUnterkonten = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Function CheckUnterkontenID(objTB As Object) As Boolean
CheckUnterkontenID = True
If Not (objTB.BackColor = vbGreen) Then
MsgBox "Textbox ist nicht grün"
objTB.SetFocus
End If
End Function
Jede einzelne für sich funktioniert.
Was ich jedoch benötige ist, dass wenn die TB vbgelb ist, dann Focus(enthalten) anhalten Wert einfügen und weiter zum Nächsten.
Am Ende, wenn alle grün sind Commandbutton1 auf enabled=True setzen.
Besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: wie komme ich in die nächste Prüfung
16.09.2018 20:51:22
fcs
Hallo Peter,
der sinnvolste Weg die Eingaben zu prüfen ist die Nutzung des Exit-Ereignisse der Textboxen.
Beim Verlassen der Textbox wird die Prüffunktion gestartet. Die Prüffunktion setzt auch die Farbe der Textbox (Gelb/Grün).
Ist die Prüfung OK wird der Fokus auf die nächste Textbox gesetzt. Ist die Prüfung nicht OK, dann bleibt der Fokus auf der Textbox.
Am Ende der Exit-Prozedur wird eine Prozedur auf gerufen, die den Status (hier Farbe =Grün) aller relevanten Textboxen prüft und ggf. den Commandbutton aktiviert.
Hier eine kleine Beispieldatei mit 3 Textboxen in einer Userform.
Danach solltest du deine Datei anpassen können.
https://www.herber.de/bbs/user/123993.xlsm
Gruß
Franz
Anzeige
AW: wie komme ich in die nächste Prüfung
17.09.2018 06:58:53
Peter
Hallo Franz,
besten Dank für Deine Hilfe.
Leider ein Fehler:
Function fncTestZahl(objBox As Object, Optional optMuss As Boolean, _
Optional strFormat As String = "#,##0.00", _
Optional msgText As String) As Boolean
'Prüfen, ob Textbox ein Zahl enthält
Dim strWert As String
strWert = objBox.Object.Value
If strWert = "" And optMuss = True Then
fncTestZahl = False
ElseIf strWert = "" And optMuss = False Then
fncTestZahl = True
ElseIf IsNumeric(strWert) Then
fncTestZahl = True
objBox.Object.Value = Format(CDbl(strWert), strFormat)
Else
fncTestZahl = False
If msgText = "" Then
msgText = "Eingabe in Textbox """ & objBox.Name & """ ist keine gültige Zahl!"
End If
MsgBox msgText, vbOKOnly + vbInformation, "Prüfung Eingabe - " & objBox.Name
End If
If fncTestDatum Then                        ' hier bei  If fncTestDatum  Fehlermeldung
objBox.BackColor = vbGreen
Else
objBox.BackColor = vbYellow
End If
End Function
* Fehler beim Kompilieren Argument ist nicht optional
Kannst Du mir bitte helfen.
Gruss
Peter
Anzeige
AW: klappt
17.09.2018 07:02:09
Peter
Hallo Franz,
Fehler gefunden funktioniert einwandfrei.
Vielen Dank.
Gruss
Peter
AW: komme nicht klar
18.09.2018 08:24:41
Peter
Hallo Franz,
ich habe die Datei fast fertig. Kleinere Punkte sind noch offen.
Die Function soll sofern Textbox3 = "" den Fokus behalten und eine MsgBox "bitte Wert eingeben!" anzeigen.
Ausserdem soll es bezüglich des Formats egal sein, ob Text oder Zahl in dieser TB steht.
Wenn das Label8 = "" dann soll die MaxLength = 50 sonst 25 betragen und der Focus auf TB 5 erfolgen, sonst TB4.
Kannst Du mir hierbei bitte behilflich sein.
Besten Dank
Gruss
Peter
AW: komme nicht klar
18.09.2018 16:59:36
fcs
Hallo Peter,
so sollte es funktionieren.
Gruß
Franz

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox3
If .Text = "" Then
Cancel = True
MsgBox "Bitte einen Wert in """ & .Name & """ eingeben!", _
vbOKOnly, "Prüfung Eingabe " & .Name
Else
If Me.Label8.Caption = "" Then
If Len(.Value) > 50 Then
.MaxLength = 50
MsgBox "Der eingegeben Text darf max 50 Zeichen lang sein"
Cancel = True
Else
Me.TextBox5.SetFocus
End If
Else
If Len(.Value) > 25 Then
.MaxLength = 25
MsgBox "Der eingegeben Text darf max 25 Zeichen lang sein"
Cancel = True
Else
Me.TextBox4.SetFocus
End If
End If
End If
End With
End Sub
'Das Setzten der MaxLength von Textbox3 erfolgt sinnvoller Weise dann, wenn die _
Beschriftung (Caption) von Label8 geändert wird.

Anzeige
AW: erledigt
18.09.2018 17:22:11
Peter
Hallo Franz,
besten Dank für Deine Bemühungen.
Leider funktioniert dies nicht.
Ich habe zwischenzeitlich selbst an der UF gearbeitet und bin zu einer Lösung gekommen.
1. in UF_activate
'Anfang Begrenzung der Max. Anzahl von Stellen in TextBox3 _
wenn Textbox4 nicht benötigt wird = Label8 leer
With TextBox3
If Label8 > "" Then
.MaxLength = 15
Else
.MaxLength = 30
TextBox5.SetFocus
End If
End With
With TextBox4
.MaxLength = 15
End With
'Ende Begrenzung max.Anzahl
Damit wird die Max.Länge bestimmt.
und der Code für TextBox3:
Private Sub Textbox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Datum prüfen - Musseingabe
If fncVorgang1(objBox:=TextBox3, optMuss:=True) = True Then
If TextBox4 = "" And Label8 = "" Then
TextBox5.SetFocus
TextBox2.BackColor = vbGreen
ElseIf TextBox4 = "" And Label8 > "" Then
TextBox4.SetFocus
Else
Cancel = True
End If
End If
Call prcCeckEingaben
End Sub
Mit dieser Lösung funktionert es einwandfrei.
Nochmals besten Dank für Deine Hilfe und noch einen schönen Tag.
Gruss
Peter
Anzeige
Problem mit Text
19.09.2018 05:38:11
Peter
Guten Morgen Franz,
ich habe noch ein Problem und bitte Dich mir dabei zu helfen.
Du hast mir in Deinem Beispiel drei Funktionen eingebaut:
1. Datum muss
2. Zahl muss
3. Zahl optional
Was ich noch benötige, ist Text muss. Wird jedoch eine Zahl eingegeben, muss diese in Text umgewandelt werden.
Besten Dank für Deine Hilfe.
Gruss
Peter
AW: erledigt
19.09.2018 09:12:46
Peter
Hallo Franz,
habe die Funktion umgebaucht - funktioniert einwandfrei.
Nochmals besten Dank für Deine Unterstützung.
Gruss
Peter

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige