Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[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ß
Antworten Top
#2
Hallo,

änder deine If-Bedingung zu

Code:
Elseif TextBox_Urlaubsbeginn.Text <> "" then
Viele Grüße,
Matthias

-------------------------------------------------------------------------------------------

Man muß nicht alles wissen, man muß nur wissen, wie man die Lösung findet.
Antworten 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
Antworten 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
Antworten 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.
Viele Grüße,
Matthias

-------------------------------------------------------------------------------------------

Man muß nicht alles wissen, man muß nur wissen, wie man die Lösung findet.
[-] Folgende(r) 1 Nutzer sagt Danke an Matthias84 für diesen Beitrag:
  • EasY
Antworten 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
Antworten Top
#7
Vielen vielen Dank Matthias - das war es!!!!
Antworten Top


Gehe zu:


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