Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VB Laufzeitfehler 13 - Fehlerbehebung?
#1
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". 

Kann mir hier vielleicht jemand helfen? :)

Hab das File auch mal beigefügt.


Angehängte Dateien
.xlsm   Reisekostenabrechnung_TEST.xlsm (Größe: 25,99 KB / Downloads: 4)
Antworten Top
#2
Moin!
Folgende Vorgehensweise hat sich im Büroalltag bewährt:
Einmalig an jedem Rechner
  • Datei, Optionen, Dokumentprüfung, AutoKorrektur-Optionen
  • Ersetzen: Doppelkomma ,, Durch: Doppelpunkt :

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)
Antworten Top
#3
Hallo Ralf, 

vielen Dank für deine rasche Antwort! 

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?

Lg
Antworten Top
#4
(17.10.2018, 09: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:
  • xenon09
Antworten Top
#5
Ich hätte noch eine Alternative anzubieten:

- Formatiere deine Uhrzeitfelder benutzerdefiniert "00\:00" (ohne Anführungszeichen)
- Rechne in deiner Formel statt mit 
Code:
B11-B10
mit
Code:
=ZEITWERT(LINKS(B11; 2) & ":" & RECHTS(B11; 2))-ZEITWERT(LINKS(B10; 2) & ":" & RECHTS(B10; 2))

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:
  • xenon09
Antworten Top
#6
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

    If Len(Target.Value) = 0 Then
        Exit Sub
    End If

    Application.EnableEvents = False
    Target.Value = Format(Int((Target.Value) / 100) / 24 + (Target.Value / 100 - Int(Target.Value / 100)) / 14.4, "hh:mm")
    
EH:
    Application.EnableEvents = True

End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Storax für diesen Beitrag:
  • xenon09
Antworten Top
#7
Hallo Storax, 

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. 


Danke nochmal! :)


Lg
Antworten Top
#8
Hallo

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
Antworten Top
#9
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.
Schöne Grüße
Berni
Antworten Top
#10
Ich hingegen bin eitel!  Blush
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)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste