Clever-Excel-Forum

Normale Version: [VBA] Fehlerroutine mit if-Schleife
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Leute,

mein Kopf raucht, da ich seit einer Stunde an einer Fehlerroutine rumtüftel. Es will aber nicht so, wie ich will. 


Code:
Private Sub TextBox_Urlaubsbeginn_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'Überprüfe, ob in der Textbox ein Datum eingetragen ist
If IsDate(TextBox_Urlaubsbeginn.Text) And TextBox_Urlaubsbeginn.Text = "" Then
       TextBox_Urlaubsbeginn.Text = Format(CDate(TextBox_Urlaubsbeginn.Text), "DD.MM." & ThisWorkbook.Sheets("Urlaubskalender").Cells(1, 1))
   Else
       MsgBox "Bitte gültiges Datum eingeben.", vbInformation, "Information"
       TextBox_Urlaubsbeginn.Text = ""

End If

End Sub

Das Sub soll prüfen, ob in der Textbox ein Datum eingetragen wurde und dieses in das entsprechende Format mit der aktuellen Jahreszahl umwandeln. Wenn nicht, soll er den Fehler ausgeben. Allerdings soll dieser Fehler nicht ausgegeben werden, wenn man nur kurz in die Textbox klickt und dann ins nächste Feld springt (ich empfinde es als störend, wenn dann eine Box aufploppt).

Vielen Dank im voraus und Gruß
Hallo,

änder deine If-Bedingung zu

Code:
Elseif TextBox_Urlaubsbeginn.Text <> "" then
Code:
If IsDate(TextBox_Urlaubsbeginn.Text) And TextBox_Urlaubsbeginn.Text = "" Then
Hmmm... mal sehen: Diese Zeile besagt für mich
Wenn Textbox_Urlaubsbeginn ein Datum enthält UND wenn Textbox_Urlaubsbeginn leer ist, dann mach...

Was fällt hier auf?
Hallo Matthias,

ich stehe gerade auf dem Schlauch - wo in der Codezeile soll denn das Elseif hin?

@MisterBruns
Du hast Recht, habe die falsche Codezeile kopiert (tüftel schon sehr lange daran rum). Aber auch, wenn ich das "=" durch "<>" ändere, ploppt die MsgBox auf :(


Btw:
In einer anderen Userform habe ich für eine ähnliche Routine folgenden Code eingebaut - dieser funktioniert komischerweise (wieso, weiß ich nicht). Habe die Umkehrung mit "if not" auch so auf das obige Beispiel angewandt - ohne Erfolg.


Code:
Private Sub TextBox_Urlaubsanspruch_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'Überprüfe, ob in der Textbox eine Zahl eingetragen ist
If Not IsNumeric(TextBox_Urlaubsanspruch.Text) And TextBox_Urlaubsanspruch <> "" Then
       MsgBox "Bitte gültige Zahl eingeben.", vbInformation, "Information"
       TextBox_Urlaubsanspruch.Text = ""

End If

End Sub
Das Elseif muss anstatt deines Else-Befehls hin. Wenn du nicht möchtest, dass die Msg-Box aufpoppt, wenn das Textfeld leer ist, must du natürlich davor prüfen, ob dieses leer ist.
Auch Hallo,

vielleicht (mit einer Modulvariablen und dem Enter-Ereignis der TextBox)

Code:
Private dblZeit As Double

Private Sub TextBox_Urlaubsbeginn_Enter()
dblZeit = Now
End Sub

Private Sub TextBox_Urlaubsbeginn_Exit(ByVal Cancel As MSForms.ReturnBoolean)


If CDbl(Now) - dblZeit < 0.000005 Then Exit Sub
'Überprüfe, ob in der Textbox ein Datum eingetragen ist
If IsDate(TextBox_Urlaubsbeginn.Text) And TextBox_Urlaubsbeginn = "" Then
        TextBox_Urlaubsbeginn.Text = Format(CDate(TextBox_Urlaubsbeginn.Text), "DD.MM." & ThisWorkbook.Sheets("Urlaubskalender").Cells(1, 1))
    Else
        MsgBox "Bitte gültiges Datum eingeben.", vbInformation, "Information"
        TextBox_Urlaubsbeginn.Text = ""

End If

End Sub
Vielen vielen Dank Matthias - das war es!!!!