UserForm rechnet nicht richtig.?
ich habe in C3=Aufgabe; D3=Bearbeiter;E3=Anfangstermin;F3=Endtermin G3=DidDifferenz von Endtermin und Anfangstermin als Dauer der Aufgabe und H3 =die Differenz von Heute und Endtermin. Wenn ich nun die dauer per Hand berechne, ich meine ich gebe die Formel G=F3-H3 rechnet Excel richtig mache ich das selbe über die UserForm kommt Unfug raus. Und wie ich die offenen Termine per UserForm ausrechne weiß ich noch nichtt. Kann mir da einer helfen.
Gruß Monkee
7 Antworten
Bilder waren hilfreich...
Der Inhalt der Textbox wird bei der Übernahme nicht als Datum formatiert, daher kommen die merkwürdigen Ergebnisse beim Rechnen.
Versuch mal
Activecell.offset(0,2).value = CDATE(.textbox3.value) und das gleiche mit der 2. Textbox.
Oder statt Textfeld ein DTPicker (also Kalenderauswahlfeld)
Das musst Du meist allerdings noch in die Werkzeugsammlung der Userform aufnehmen: Im VBA Editior unter Extras -> Weitere Werkzeuge und dort den Microsoft Date and Time Picker Control auswählen. Damit können nur gültige Datumswerte erfasst werden und das CDATE entfällt.
Meinst du mit UserForm ein VBA-Macro mit grafischer Oberfläche? Dann musst du die Berechnung der Differenzzeiten in deinem Macro vornehmen und dabei berücksichtigen, dass Excel immer mit Tagen rechnet. Eine Stunde sind für Excel 0,0416666667 Tage.
Genau so meine ich das allerdings ist doch in den Zellen der Spalte "I" eine Kombibox....die müsste mit runter genommen werden. Und auch das Format soll mit runter genommen weden. siehe Anhang


Wenn Du statt den Comboboxen für den Status auf die Variante umsteigen kannst / willst, die Datenprüfung zu nutzen (Daten > Datengültigkeit prüfen > Liste: Dort wie bei den Comboboxen A4:A7 als Liste):
Dann die beiden Zeilen mit activecell.offset(0,6) bzw. 0,7, die bisher drin stehen ersetzen durch die folgenden. Das geht evtl. noch besser, sollte aber zumindest funktionieren:
With ActiveCell.Offset(0, 6)
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
ActiveCell.Offset(0, 7) = "offen"
ActiveCell.Offset(0, 7).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$A$4:$A$7"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Wie gesagt, bei mir funktioniert das.
Mir fällt auf, das bei 18.04/ 20.04 die Berechnung in der Spalte G richtig ist.
Versuche mal heraus zu bekommen, WAS da anders ist als in den anderen Zeilen.
Wie sind die Formatierungen der Zellen?
Schreib mal in H1: =E1, zieh das runter und formatiere die Spalte H danach als Zahl. Das gleich mit I1/ F1.
Fällt da etwas auf?
Ninombres Hinweise könnten auch sehr hilfreich sein.
Notfalls lade doch mal eine Beispieltabelle hoch.
Deine Formel verstehe ich noch nicht so ganz.
In F3 steht ein Endtermin, z. B. 01.05.2016. In H3 die Differenz von heute zum Endtermin (=ABS(HEUTE()-F3)).
In G3 soll die Differenz zwischen Endtermin und Anfangstermin stehen (=F3-E3). Du rechnest aber G=F3-H3.
Deine Formel passt nicht zu deiner Beschreibung.
In VBA kannst du auf Zellwerte mittels Range("G3").Value und auf die Formel mittels Range("G3").Formula / .FormulaR1C1 / ... zugreifen.
Das ist richtig, nur weiß ich eben nicht wie ich das in der UserForme berechne. Anfangstermin=22.04.2016 Endtermin =30.04.2016. ergibt eine Dauer von 8 Tagen. Und mit deiner Formel Abs(Heute()- F3 verbleiben noch 5 Tage.Hier mal den Code
Private Sub CommandButton1_Click()
Set frm = UserForm1
Application.ScreenUpdating = False
Sheets("Tabelle3").Activate
'letzte belegte Zelle in Tabelle finden
Range("c65536").End(xlUp).Offset(1, 0).Select
With frm
ActiveCell.Offset(0, 0).Value = .ComboBox1.Value 'Aufgabe
ActiveCell.Offset(0, 1).Value = .ComboBox2.Value 'Mitarbeiter
ActiveCell.Offset(0, 2).Value = .TextBox3.Value 'Anfangstermin
ActiveCell.Offset(0, 3).Value = .TextBox4.Value 'Endtermin
ActiveCell.Offset(0, 4).Value = ActiveCell.Offset(0, 3) - ActiveCell.Offset(0, 2)
ActiveCell.Offset(0, 5).Value = Abs(HEUTE() - F3)
End With
Unload Me
'UserForm1.Hide....abbrechen
Sheets("Tabelle3").Activate
End Sub
Ich hoffe das es jetzt verständlich ist.
Gruß Monkee
Das kann natürlich nicht funktionieren:
ActiveCell.Offset(0, 5).Value = Abs(HEUTE() - F3)
Du musst den rechten Teil noch in VBA-Syntax umwandeln.
ActiveCell.Offset(0, 5).Value = Abs(Date() - ActiveCell.Offset(0, 3).Value)
Du schreibst übrigens nicht einheitlich .Value hinter das Offset.
ich hab im Moment keine konkrete Idee. Mein erster Ansatz einfach aus der Zeile darüber zu kopieren geht nicht, weil die Kombibox ja ein Steuerelement ist und es zudem ja sein kann, dass hier schon ein Eintrag drin steht.
Ich muss bei nächster Gelegenheit mal nachdenken