Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1664to1668
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

Ausgabe Zeit 0:00 statt 0:30 mit VBA

Ausgabe Zeit 0:00 statt 0:30 mit VBA
02.01.2019 11:07:07
Peerli
Hallo Excelgemeinde.
Zu allererst wünsche ich allen Usern ein gesundes neues Jahr.
Gleich im neuen Jahr beschäftige ich mit meinen liegend gebliebenen Arbeiten, die ich über die Feiertage bei Seite gelegt habe.
Da bin ich auf einen Fehler in meinem Code gestossen, der mich nicht weiterbringt, weil ich den Fehler nicht sehe.
Und zwar...
soll bei Eingabe einer Zahl der formatierte Zeitwert 3stellig in die Zelle eingetragen werden. Bei falscher Eingabe kommt eine Fehlermeldung, je nachdem welche Eingabe getroffen wurde.
In Spalte T kommt die Start-Uhrzeit und in U die Ende-Uhrzeit. In Spalte V die Ist-Zeit und in Spalte W eine festgelegte Soll-Zeit. In Spalte X die Pausenzeit.
Momentan sieht es so aus...
T U V W X
8:00 16:00 ##### 7:48 0:00
und so soll es aussehen...
T U V W X
8:00 16:00 7:48 7:48 0:30
Soweit funktioniert es auch in den Spalten T und U. ur bei Spalte X hat er mit der führenden 0 seine Probleme.
Wenn ich in Spalte T 800 oder 0800 eingebe, wird der richtige Wert 8:00 eingetragen. Ebenso in Spalte U mit 1600. Aber wenn ich in Spalte X 030 eingebe, kommt als Ergebnis 0:00 und somit auch der "falsche" Wert in Spalte V. Die Fehlerroutine nimmt die Spalte X anstandslos an.
Achso, die Zellformatierungen sind bei allen Spalte gleich (Zeitformat)
Anbei der Code

' Procedur zur Zeiteingabe im Bereich Spalte T und U und X vierstellig => Ausgabe [h:mm]
' ************** angepasst von Piet aus  www.Herber.de ***************************************** _
_
Dim Eingabe As Variant, fmd As String
On Error GoTo ErrorHandler
If target.Count > 1 Then Exit Sub
If Not Intersect(target, Range("T12:U42,X12:X42")) Is Nothing Then
Application.EnableEvents = False
With target
'Texte und Zahlen > 4 Stellig als Fehler abfangen
If Not IsNumeric(.Value) Then
fmd = "Err": MsgBox "Eingabe ist keine Zahl!!"
'             ElseIf .Value  1 And Len(.Value) > 4 Then
fmd = "Err": MsgBox "Bitte nur 4 stellige Zahlen eingeben!"
ElseIf .Value > 1 And fmd = Empty Then
.Value = CDate(Left(.Value, Len(.Value) - 2) & ":" & Right(.Value, 2))
End If
.NumberFormat = "[h]:mm"
End With
End If
ErrorHandler:
If fmd = "Err" Then
target.Value = Empty
target.Select
End If
Application.EnableEvents = True
' *************** Ende *********************************************************************
End Sub
Vielleicht hat jemand einen Rat.
LG
Peer

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

Betreff
Datum
Anwender
Anzeige
AW: Ausgabe Zeit 0:00 statt 0:30 mit VBA
02.01.2019 12:01:25
Robert
Hallo Peer,
das liegt daran, dass bei Eingabe von z.B. 030 Excel die führende 0 löscht und dadurch als Stundenzahl einen leeren String annimmt.
Ändere die Zeile mit dem letzten ElseIf wie folgt (Änderung in rot):
.Value = CDate("0" & Left(.Value, Len(.Value) - 2) & ":" & Right(.Value, 2))

Dann müsste es klappen.
Gruß
Robert
AW: Ausgabe Zeit 0:00 statt 0:30 mit VBA
02.01.2019 12:19:00
Peerli
Hallo Robert.
Das war es. Es war mir schon bewusst gewesen, dass die führende Null das Problem war. Und jetzt, wo ich deine Lösung sehe, kommt es mir auch...
Vor dem Doppelpunkt ist ja bei Spalte T und U eine positive Zahl. Bei Spalte X nicht...
LG
Peer
Anzeige
Rat: Versuch's mal mit 4 Dezimalen! Dito GNJ! owT
02.01.2019 12:04:17
Luc:-?
:-?
AW: Rat: Versuch's mal mit 4 Dezimalen! Dito GNJ! owT
02.01.2019 12:21:20
Peerli
Hallo Luc.
Darüber dachte ich auch schon nach, das Problem wäre aber das selbe, glaube ich.
LG
AW: Ausgabe Zeit 0:00 statt 0:30 mit VBA
02.01.2019 12:19:59
Peerli
Vielleicht kann mir noch jemand helfen bei folgenden Gültigkeitsregel (rot), bei der bei Eingabe geprüft werden soll, ob eine plausible Zet eingegeben wird.
        If target.Count > 1 Then Exit Sub
If Not Intersect(target, Range("T12:U42,X12:X42")) Is Nothing Then
Application.EnableEvents = False
With target
'Texte und Zahlen > 4 Stellig als Fehler abfangen
If Not IsNumeric(.Value) Then
fmd = "Err": MsgBox "Eingabe ist keine Zahl!!"
'             ElseIf .Value 
ElseIf .Value > 1 And Len(.Value) > 4 Then
fmd = "Err": MsgBox "Bitte nur 4 stellige Zahlen eingeben!"
ElseIf .Value > 1 And fmd = Empty Then
.Value = CDate("0" & Left(.Value, Len(.Value) - 2) & ":" & Right(.Value, 2))
End If
.NumberFormat = "[h]:mm"
End With
End If
ErrorHandler:
If fmd = "Err" Then
target.Value = Empty
target.Select
End If
LG
Peer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige