17.10.2018, 08:27 (Dieser Beitrag wurde zuletzt bearbeitet: 17.10.2018, 08:28 von xenon09.)
Hallo zusammen,
ich habe eine Reisekostenabrechnung im Excel erstellt, bei dem ihr mir schon sehr geholfen habt.
Nun habe ich die Anmerkung erhalten, dass es angenehmer ist, wenn man die Uhrzeit ohne Doppelpunkt eingeben kann. Nach langer Recherche bin ich auf ein VB Makro gestoßen.
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim Zeit As Double If Not Intersect(Target, Range("B08:B55")) Is Nothing Then Zeit = Int((Target.Value) / 100) / 24 + (Target.Value / 100 - Int(Target.Value / 100)) / 14.4 Target.Value = Format(Zeit, "hh:mm") End If Application.EnableEvents = True End Sub
Funktioniert alles soweit ganz gut, was mich überrascht, da ich doch ein VB Jüngling bin. :)
Ich habe nur gewisse Spalten zur Bearbeitung freigegeben, der Rest ist gesperrt. Vom MA kann nur Datum, Uhrzeit, der Ländercode mittels Drop-Down, die Kilometer und das Nächtigungsgeld manuell eingegeben werden. (neben Name und Datum).
Das Problem jetzt: Wenn man sich z.B. vertippt, und die Uhrzeit rauslöschen will (mit entf.-taste), dann kommt plötzlich die Meldung "Laufzeitfehler '13': Typen unverträglich".
Jetzt kann man mittels Ziffernblock blitzschnell die Uhrzeiten eingeben. 9,, ergibt 09:00 15,,05 ergibt 15:05
Ich persönlich halte von diesen VBA-Lösungen nix, weil sie eben (wie Du ja siehst) zu viele Fallstricke enthalten, die erst mühsam ausprogrammiert werden müssen.
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)
Diese Option hatte ich mir zuvor auch schon überlegt. Das Problem ist, dass wir ein super Zeiterfassungs-Excel haben (der, der das entworfen hat, ist nicht mehr im Unternehmen) und dort funktioniert die Eingabe ohne Doppelpunkt problemlos (Das File ist gesperrt und die Codes für mich nicht einsehbar) Jetzt sind die Mitarbeiter natürlich auf diese Lösung getrimmt :(
Ich bin auch kein Freund von VBA-Lösungen, vor allem weil ich mich damit auch nicht gut auskenne. Hatte gehofft, hier findet sich zufällig ein talentierter VBA Programmierer oder dass es eine andere Möglichkeit gibt, Uhrzeiten ohne Doppelpunkt einzugeben. evtl mit anderem Zahlenformat?
(17.10.2018, 10:06)xenon09 schrieb: Jetzt sind die Mitarbeiter natürlich auf diese Lösung getrimmt :(
Und noch viel schneller sind sie auf die Alternative getrimmt. Ich kann die Excel-Anwender nicht mehr zählen, die mir nach meiner Demo mit breitem Grinsen geantwortet haben: "Na, das ist aber einfach!"
Ich bin gerade damit beschäftigt, sehr viele Formulare in einem gemeinnützigen Verein benutzerfreundlicher zu machen. Einzige Vorgabe war, dass kein VBA gewünscht ist. Meinst Du, dass dies ohne Schulung der MA geht?
Aber vielleicht hilft Dir ja jemand anderes.
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)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28 • xenon09
Ist zwar jetzt nicht besonders sexy, aber eine Möglichkeit. Von mir aus auch über eine Hilfsspalte, damit es nicht zu unübersichtlich wird - ist aber nicht zwingend nötig.
Schöne Grüße Berni
Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:1 Nutzer sagt Danke an MisterBurns für diesen Beitrag 28 • xenon09
17.10.2018, 10:59 (Dieser Beitrag wurde zuletzt bearbeitet: 17.10.2018, 10:59 von Storax.)
OP: Deine Anaylse ist falsch. Typen unverträglich kommt, wenn man mehr als eine Zelle ausgewählt hat und dann ENTF drückt. Das liegt daran, dass Dein Code u.a. folgende Standardfehler enthält 1. Es wird nicht die Anzahl der ausgewählten Zellen geprüft 2. Bei einem Fehler wie z.B. oben wird das Event-Triggering nicht wieder eingeschaltet
Ein weiterer Fehler ist, dass beim Löschen einer Zelle (also nur eine Zelle ist ausgewählt und der Inhalt wird gelöscht), dann wird auch formatiert und das Ergebnis ist 00:00. Ich denke nicht, dass das so gewollt ist.
Das alles hätte Dir beim Testen auffallen müssen, auch wenn Du sonst keine VBA Kenntnisse hast, das ist Mindestanforderung, richtig Testen!
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EH
If Intersect(Target, Range("B08:B55")) Is Nothing Then Exit Sub End If
If Target.Cells.CountLarge > 1 Then Exit Sub End If
erstmal ein großes Danke für deine Antwort und deine Hilfe
Ich selbst, und 2 ausgewählte Mitarbeiter haben das File aktuell zum Test - es liegt also nicht allen vor. Somit kann man behaupten, dass es derzeit ausgiebig getestet wird. :)
Solange nur eine Zelle markiert war, konnte ich das Feld problemlos leeren, ohne dass der Fehler aufgetreten ist, daher ist es auch nicht gleich aufgefallen.
Es war tatsächlich nur der Fall, wenn ich alle markiert habe und die Zellen leeren wollte.
sofern sich alle an den Code gewöhnt haben was haltet ihr voın meiner Version?? Den Mehrfach Zellen Fehler abfangen! Das sieht zuerst auch für Kollegen verwirrend aus, weil in der ersten If Anweisung -NICHTS passiert-! Sie faengt nur den Fehler ab!!
mfg Gast 123
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim Zeit As Double If InStr(Target.Address, ":") Then ElseIf Not Intersect(Target, Range("B08:B55")) Is Nothing Then Zeit = Int((Target.Value) / 100) / 24 + (Target.Value / 100 - Int(Target.Value / 100)) / 14.4 Target.Value = Format(Zeit, "hh:mm") End If Application.EnableEvents = True End Sub
Ich frage mich, wieso hier krampfhaft an einem Code festgehalten wird, obwohl völlig unnötig, wie ich gezeigt habe. Das meine ich nicht aus Eitelkeit, sondern weil in meinen Augen doch wo es geht ein Bordmittel bevorzugt werden soll - noch dazu, wenn man den Code nicht wirklich versteht.
Ich hingegen bin eitel! Völlig ohne Verrenkungen die alternative Eingabevariante wählen. Die "Schulung" betrifft ca. eine Minute pP Das Einrichten dito …
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)