Frage von Monkee, 101

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

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 65

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.


Expertenantwort
von Suboptimierer, Community-Experte für Excel, 62

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.

Kommentar von Monkee ,

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

Kommentar von Suboptimierer ,

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.

Kommentar von Suboptimierer ,

Alternative:

ActiveCell.Offset(0, 5).FormulaR1C1 = "=ABS(TODAY()-RC[-2])"
Expertenantwort
von Oubyi, Community-Experte für Excel, 56

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.

Antwort
von mirolPirol, 64

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.

Antwort
von maximilianus7, 64

so nicht. woher sollen wir wissen, wie du in der userform rechnest? deone code bitte.

Antwort
von Monkee, 44

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 

Kommentar von Ninombre ,

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

Kommentar von Ninombre ,

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
Antwort
von Monkee, 44

Hier ist mal die Datei zum besseren Verständniss.

http://www.uploadagent.de/show-203289-1461596547.html

Gruß Monkee

Antwort
von Monkee, 58

Sorry, ich habe doch die Anhänge vergessen. Das will ich mal schnell nachholen.

Antwort
von Monkee, 44

Jetzt funktioniert das schön und schon habe ich die nächste Frage.

Wie kann ich die beiden Zellen Status und Maßnahmen per UserBox in die nächste Zeile kopieren?

Und wie kann man bei gute Frage mal ne Exceldatei rüberschaufeln.

Gruß Monkee

Kommentar von Ninombre ,

Meinst Du, dass die beiden Zellen angelegt werden, wenn über die Userform ein neuer Eintrag generiert wird?

Wenn man bei der bisherigen Logik mit dem Offset bleiben will, ggf. so:
ActiveCell.Offset(0,6).value=ActiveCell.Offset(-1,6).value

Wenn Du sie über die Userform füllen willst, brauchst Du weitere Comboboxen oder ähnliches zu Erfassung

Hochladen kann man Exceldateien hier leider gar nicht, nur auf einem Webhoster und dann Link hier reinstellen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten