Uhrzeiten verrechnen über Textboxen
#1
Moin zusammen,
wo ich überhaupt keinen Ansatz finde, ist das Verrechnen von Uhrzeitangaben innerhalb einer Userform.
Ich möchte in eine Userform in die Textbox2 eine Zeitangabe eingeben (z.B. 7:00 = Startzeit), in die Textbox3 die Endzeit (z.B. 16:00) und in der TextBox4 sollen diese während der Eingabe verrechnet und angezeigt werden.

Mein letzter Versuch war:
Private Sub CommandButton1_Click()
TextBox3.Value = Format("0:00")
TextBox2.Value = Format("0:00")
TextBox4 = Format(CDate(TextBox3) - (CDate(TextBox2) - 24), "0:00")

End Sub

Es ist so, als wenn die Textboxen 2 und 3 nicht wüssten, das sie gefüllt werden, um verrechnet werden zu können.

Wer hätte einen Lösungsansatz für mich?
Antworten Top
#2
Hallo,

Code:
Private Sub TextBox2_Change()
  If IsDate(TextBox2) And IsDate(TextBox3) Then
    TextBox4 = Format(CDate(TextBox3) - (CDate(TextBox2)), "hh:nn")
  Else
    TextBox4 = ""
  End If
End Sub

Private Sub TextBox3_Change()
  If IsDate(TextBox2) And IsDate(TextBox3) Then
    TextBox4 = Format(CDate(TextBox3) - (CDate(TextBox2)), "hh:nn")
  Else
    TextBox4 = ""
  End If
End Sub

Gruß Uwe
Antworten Top
#3
Moin Uwe,
mein Dank geht mal wieder an Dich.
Der Code funktioniert einwandfrei.

Wenn ich den Code richtig verstehe, dann sagt er aus, wenn in beiden Textboxen eine Zeitangabe steht, wird in TextBox4 gerechnet und die Differenz in Stunden: Minuten ausgegeben.
Das Minuten als "nn" angegeben werden, darüber bin ich gestern auch gestolpert, zuerst dachte ich, das wäre ein Schreibfehler.
Antworten Top
#4
(19.06.2022, 08:45)Björn.412 schrieb: Das Minuten als "nn" angegeben werden, darüber bin ich gestern auch gestolpert, zuerst dachte ich, das wäre ein Schreibfehler.

Moin und nur am Rande!
Es geht (meist!) beides.
Wie so häufig mag ein Blick in die Dokumentation aufschlauen.

AB
1SymbolBereich
2n0-59 (Minute der Stunde, ohne vorangestellte Null)
3nn00-59 (Minute der Stunde, mit vorangestellter Null)
4m0-59 (Minute der Stunde, ohne vorangestellte Null)
Nur, wenn h oder hh vorangestellt ist.
5mm00-59 (Minute der Stunde, mit vorangestellter Null)
Nur, wenn h oder hh vorangestellt ist.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Moin Uwe,
ich habe dann noch eine Frage...
Ich habe - (CDate("0:30")) dem Code hinzugefügt, um die Pausenzeiten abzuziehen.
Das funktioniert auch.

Private Sub TextBox2_Change()
  If IsDate(TextBox2) And IsDate(TextBox3) Then
    TextBox4 = Format(CDate(TextBox3) - (CDate(TextBox2)) - (CDate("0:30")), "hh:mm") 
  Else
    TextBox4 = ""
  End If
End Sub

Jetzt möchte ich in TextBox5 die Überstunden ausweisen, dazu habe ich den Code wieder etwas angepasst, dennoch wird in TextBox5 nichts angezeigt und das verstehe ich nicht.

Private Sub TextBox3_Berechnen()
If IsDate(TextBox2) And IsDate(TextBox3) Then
TextBox5 = Format(CDate(TextBox3) - (CDate(TextBox2)) - (CDate("8:30")), "hh:mm")
Else
    TextBox5 = ""
  End If
End Sub

Moin Ralf,
danke für Deine Antwort und das habe ich mir gestern bereits erlesen.
Antworten Top
#6
gelöscht
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#7
was gelöscht

OK ... habe den Fehler gefunden.
TextBox2_Change ... ist nicht nur ein Titel, es ist ein Ereignis und das kann ich nicht einfach umbenennen.

Private Sub TextBox2_Change()
  If IsDate(TextBox2) And IsDate(TextBox3) Then
    TextBox4 = Format(CDate(TextBox3) - (CDate(TextBox2)) - (CDate("0:30")), "hh:mm") 
  Else
    TextBox4 = ""
  End If
End Sub

Private Sub TextBox3_Change()
  If IsDate(TextBox2) And IsDate(TextBox3) Then
    TextBox4 = Format(CDate(TextBox3) - (CDate(TextBox2)) - (CDate("0:30")), "hh:mm")
  Else
    TextBox4 = ""
  End If
End Sub

Jetzt werden die Überstunden in TextBox5 ausgegeben.

Private Sub TextBox4_Change()
  If IsDate(TextBox4) Then
    TextBox5 = Format(CDate(TextBox4) - (CDate("8:30")), "hh:mm")
  Else
    TextBox5 = ""
  End If
End Sub
Antworten Top
#8
Ich halte ja bekanntlich herzlich wenig davon, so etwas mit einem Userform zu erstellen!
Ich nehme lieber Zellen, die mit vernünftigen Formatierungen nebst Datengültigkeit versehen sind.

Ich habe sogar eine "neue" Begründung:
Was machst Du mit "Unterstunden"?
Wenn ich 6 Stunden arbeite und davon 8,5 Stunden abziehen, erhalte ich mit dem Format-Gedöns 2,5 Überstunden!
Format(CDate("14:50") - (CDate("8:50")) - (CDate("8:30")), "hh:mm")
ergibt
02:30
und nicht etwa -02:30!!
Da Excel/VBA und negative Zeiten ohnehin auf Kriegsfuß stehen, würde ich, wenn überhaupt, nur mit Industriezeiten rechnen.

Two Cents
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
Hallo,

ich würde die TextBox5-Zeile ja in die beiden Change-Ereignismakros mit einfügen. Wink

Lies bitte unbedingt auch das: Editor [09] Dropdowns in Modulen

Gruß Uwe
Antworten Top
#10
Moin Uwe,
danke für den Link, war erhellend Idea
Ich bin noch ein so blutiger Anfänger, dass ich froh bin, wenn es funktioniert.

(19.06.2022, 11:29)RPP63 schrieb: Ich halte ja bekanntlich herzlich wenig davon, so etwas mit einem Userform zu erstellen!
Ich nehme lieber Zellen, die mit vernünftigen Formatierungen nebst Datengültigkeit versehen sind.

Ich habe sogar eine "neue" Begründung:
Was machst Du mit "Unterstunden"?
Wenn ich 6 Stunden arbeite und davon 8,5 Stunden abziehen, erhalte ich mit dem Format-Gedöns 2,5 Überstunden!
Format(CDate("14:50") - (CDate("8:50")) - (CDate("8:30")), "hh:mm")
ergibt
02:30
und nicht etwa -02:30!!
Da Excel/VBA und negative Zeiten ohnehin auf Kriegsfuß stehen, würde ich, wenn überhaupt, nur mit Industriezeiten rechnen.

Two Cents
Ralf

Moin Ralf,
ja das ist ein berechtigter Einwand.
Danke, ich werde dem mal nachgehen.
Antworten Top


Gehe zu:


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