Registriert seit: 16.10.2020
Version(en): 2016
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?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
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
Registriert seit: 16.10.2020
Version(en): 2016
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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
(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. | A | B | 1 | Symbol | Bereich | 2 | n | 0-59 (Minute der Stunde, ohne vorangestellte Null) | 3 | nn | 00-59 (Minute der Stunde, mit vorangestellter Null) | 4 | m | 0-59 (Minute der Stunde, ohne vorangestellte Null) Nur, wenn h oder hh vorangestellt ist. | 5 | mm | 00-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)
Registriert seit: 16.10.2020
Version(en): 2016
19.06.2022, 09:41
(Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2022, 09:42 von Björn.412.)
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.
Registriert seit: 11.04.2014
Version(en): Office 365
19.06.2022, 09:50
(Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2022, 10:03 von Klaus-Dieter.)
gelöscht
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 16.10.2020
Version(en): 2016
19.06.2022, 10:55
(Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2022, 11:15 von Björn.412.)
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo, ich würde die TextBox5-Zeile ja in die beiden Change-Ereignismakros mit einfügen. Lies bitte unbedingt auch das: Editor [09] Dropdowns in ModulenGruß Uwe
Registriert seit: 16.10.2020
Version(en): 2016
19.06.2022, 11:44
(Dieser Beitrag wurde zuletzt bearbeitet: 19.06.2022, 11:48 von Björn.412.)
Moin Uwe, danke für den Link, war erhellend 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.
|