[VBA] Fehlerroutine mit if-Schleife
#1
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ß
Top
#2
Hallo,

änder deine If-Bedingung zu

Code:
Elseif TextBox_Urlaubsbeginn.Text <> "" then
Top
#3
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?
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • Frogger1986
Top
#4
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
Top
#5
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.
[-] Folgende(r) 1 Nutzer sagt Danke an Matthias84 für diesen Beitrag:
  • EasY
Top
#6
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
Gruß Stefan
Win 10 / Office 2016
Top
#7
Vielen vielen Dank Matthias - das war es!!!!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste