Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1708to1712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel VBA Comboboxen miteinander verrechnen

Excel VBA Comboboxen miteinander verrechnen
30.08.2019 12:23:20
Stefan
Hallo, ich habe folgendes Problem.
In meiner Excel Datei geht es um einen „Stundennachweis“, auf gut Deutsch, wenn in Combobox_ZeitPb etwas eingetragen ist, sollen die beiden Zeiten von Combobox_ZeitPb – die Zeit von Combobox_ZeitPv gerechnet werden.
Die Comboboxen werden beide aus der Tabelle6!Z2:Z82 gespeist, die Zeitsprünge sind jeweils 15min.
Mein bisheriger Code is folgender:
If ComboBox_ZeitPb.Text "" Then
Worksheets("Tabelle2").Range("F2").Value = Format(CDate(ComboBox_ZeitPb.Value) - CDate(ComboBox_ZeitPv.Value), "hh:mm")

Das funktioniert soweit auch wunderbar, aber da die Zeiten zwischen 06:00 und 02:00 liegen können, habe ich ein Problem.
Wenn jetzt derjenige um 23:00 kommt (_ZeitPv) und um 01:45 geht (_ZeitPb), dann komme ich nicht auf die „normalen“ 2:45 in meiner Auswertung, sondern auf 21:15 als Ergebnis.
Meine Idee war schon, das eingetragene in _Pzbis einfach +24:00 zu rechnen, wenn es kleiner als 02:30 ist, kam aber auch nix vernünftiges bei raus.
Des weiteren, wenn die combobox mit der Pfeiltaste nach unten durchsuche, springt er von 11:45/00:30/1:15 immer auf 00:00. auch wenn ich auf die Zahlen 12:00/00:45/1:30 direkt klicke springt er automatisch auf die 00:00.
Hier hab ich noch meine Excel Datei in abgespeckter Form (sonst wäre sie zu groß geworden*g*
https://www.herber.de/bbs/user/131736.xlsm
Es geht um die UserForm_Stunden
Ich hoffe, ich konnte es einigermaßen erklären.
Ich wäre um jede Hilfe dankbar.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Comboboxen miteinander verrechnen
30.08.2019 19:33:22
Matthias
Moin!
Bzgl. der Rechnung. Rechen am Anfang immer 24 Stunden dazu. Also 24h + ZeitPb - Zeit Pv . Beim Ergebnis schaust du dann, ob du größer als 24 bist. Wenn ja, die 24 wieder abziehen.
Bzgl. des Springens, ist das wohl ein Fehler im Ex. Übergib den Wert als double Variable. Dabei dürfen aber keinen Leerstring übergeben werden, sonst kommt ein Fehler. Deshalb das so umwandeln (einCOmbo als BSp)
If ComboBox_ZeitB1v  "" Then Me.ComboBox_ZeitB1v = Format(CDbl(ComboBox_ZeitB1v), "hh:mm")

VG
AW: Excel VBA Comboboxen miteinander verrechnen
31.08.2019 10:27:35
Stefan
Hallo, danke für deine Antwort, dabei jetzt die Frage, wo und wie soll ich die 24:00 in meinen Code einfügen zum addieren, ich habs an mehreren Stellen versucht, es hat aber nicht wirklich funktioniert....
If ComboBox_ZeitB1v  "" Then Me.ComboBox_ZeitB1v = Format(CDbl(ComboBox_ZeitB1v), "hh:mm")

Muss das bei UserForm_Initialize rein?
Danke und gruß
Stefan
Anzeige
AW: Excel VBA Comboboxen miteinander verrechnen
31.08.2019 20:07:52
Matthias
Moin!
Also habe jetzt mal mit deiner Datei gespielt. Dazu ein paar Fragen / Anmerkungen.
Wozu brauchst du die Prozeudur Stundenanzeige noch? Die soll dir doch nur die Eingabe als Uhrzeit anzeigen. Da du aber eh nur die Werte aus der Tabelle nimmst und die schon das richtige Format haben, ist der Code nicht notwendig. Er verursacht im Gegenteil nur dein Problem mit der 12:00 Uhr. Auch mein Code von gestern, behebt es nur beim Eintragen, aber nicht beim aktualisieren. Mein Vorschlag, nimm den raus. FAlls er aber notwendig ist, dann ruf den Code aus den Comboboxen so auf:
Private Sub ComboBox_SPZB_Change()
Call Stundenanzeige(ComboBox_SPZB.Name)
End Sub

Also den Namen der CB mit übergeben. Den Code für Stundenanzeige dann so ändern.
Private Sub Stundenanzeige(box As Variant)
If Me.Controls(box)  "" Then Me.Controls(box) = Format(CDbl(Me.Controls(box).Text), "hh:mm")
End Sub

Damit ist dein Eintrageproblem behoben. Es wird aber auch nur die aktuell geänderte Zelle im Format geändert.
Bei der Berechnung meinte ich das so:
If ComboBox_ZeitPb.Value  "" And ComboBox_ZeitPv.Value  "" Then
temp = 1 + CDbl(CDate(ComboBox_ZeitPb.Value)) - CDbl(CDate(ComboBox_ZeitPv.Value))
If temp > 1 Then temp = temp - 1
Worksheets("Tabelle2").Range("F2").Value = Format(CDate(temp), "hh:mm")
Worksheets("Tabelle2").Range("G2").Value = ComboBox_Zeit.Text
End If

Die 1 steht für 24 Stunden, da der Rest ja als double gezählt wird. Am Anfang aber prüfen, dass beide Boxen nicht leer sind.
Eine Frage noch. Was soll passieren, wenn man Start 8 Uhr und Ende 7 Uhr eingibt? Soll dass möglich sein?
So, ich hoffe das war nicht zu verwirrend.
VG
Anzeige
AW: Excel VBA Comboboxen miteinander verrechnen
02.09.2019 13:22:11
Stefan
Servus :)
also ich hab deine Codes und Vorschläge jetzt mal ausprobiert.
Wenn ich meine Sub Stundenanzeige rausnehme, dann zeigt er mir im DropDown der combobox perse zwar schonnoch die richtige zeit an (06:00:02:00) und auch das Problem mit dem Überspringen wäre weg, aber wenn ich eine Zeit ausgewählt habe, zeigt es mir nur die Dezimalform an (Umrechnungsfaktor 24)
If ComboBox_ZeitPb.Value  "" And ComboBox_ZeitPv.Value  "" Then
temp = 1 + CDbl(CDate(ComboBox_ZeitPb.Value)) - CDbl(CDate(ComboBox_ZeitPv.Value))
If temp > 1 Then temp = temp - 1
Worksheets("Tabelle2").Range("F2").Value = Format(CDate(temp), "hh:mm")
Worksheets("Tabelle2").Range("G2").Value = ComboBox_Zeit.Text
End If

Bei dem Code hab ich das Problem, dass ich dann eine Fehlermeldung kriege ("Fehler beim Kompilieren: Variable nicht definiert")
Eine Frage noch. Was soll passieren, wenn man Start 8 Uhr und Ende 7 Uhr eingibt? Soll dass möglich sein?
Uff gute Frage, hab ich mir noch garkeine Gedanken gemacht, aber sollte natürlich nicht funktionieren.
Das könnte man aber meines Wissen nach noch in die If-Bedingung reinnehmen also Wenn Combobox_ZeitPV größer als Combobox_ZeitPB dann. Oder?
Ich hoffe ich konnte mich einigermaßen deutlich erklären :)
Grüße
Stefan
Anzeige
AW: Excel VBA Comboboxen miteinander verrechnen
02.09.2019 22:10:38
Matthias
Moin!
Kein Problem, weiß schon was du meinst.
Dann mach die Varianten mit der Übergabe des Namens beim Funktionsaufruf. Damit hast du die Anzeige und der Fehler tritt auch nicht auf.
Wenn diese Fehlermeldung kommt, ist die Variable halt nicht definiert. :-) Im Code kam da die Variable temp vor. Die hattest du vorher nicht. Hatte ich vergessen zu schreiben. Hier mal deine Datei zurück. Habe da die Berechnung und die Prüfung bzgl. Ende kleiner als Anfang drin. Das mit der Namensübergabe ist auch drin. Aber bitte nicht mit der weiterarbeiten. Habe Teile auskommentiert (Bildschirmanpassung etc.). Das würde dann fehlen. Am besten anschauen und die geänderten Teile ggf. rauskopieren.
https://www.herber.de/bbs/user/131803.xlsm
ISt aber jetzt so eingestellt, dass er bei kleiner als Anfang nix einträgt. Da könnte man auch noch im Code einen Meldung zu ausgeben und das eintragen beenden. Wenn du das aber machst, müsstest du ggf. prüfen, ob die Zeile schon neu angelegt wurde und dann ggf. wieder löschen. Da wußte ich aber nicht, wie du es willst. Ist auch als Beispiel nur für die ersten 2 Combos. Kann man aber 1 zu 1 auf die anderen übertragen.
Ansonsten bin ich jetzt mal bis Freitag nicht am Rechner. Sollten noch weitere Fragen sein oder das hier unklar beschrieben sein, am besten einen neuen Beitrag eröffnen und auf den hier verlinken. Nach 7 Tagen kann man nichts mehr editieren und ihn nur noch im Archiv anschauen.
Soweit erstmal.
VG
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige