Hallo zusammen,
ich habe ein Problem mit meiner Abfrage. Ich berechne in einem Feld die Stunden und Minuten.
Ich habe einen Wert 8,57 den ich in 8:33 wandele also 8 Std. 33 Minuten.
Wenn die Zeit aber größer als 24 ist rechnet er falsch.
Bsp.: 29,85 ist 05:50 also die Differenz zu 24 die Ausgabe sollt aber 29:50 sein also 29 Std. 50 min. Wie kann ich meine Formel ändern dass es passt???
EZeit: Format(Summe((([Dauer imin]/1,6667)/60)/24);"Zeit, 24Std")
Für Hilfe wäre ich dankbar.
Gruß, Dierk
Hallo,
das geht nicht, Access kennt kein Zeitformat >23:59:59.
Du musst die Stunden und Minuten ganz klassisch mathematisch aus den Minuten errechnen und zur Anzeige zusammensetzen.
Das Feld darf dann nicht als Uhrzeit formatiert werden, es ist ja keine Uhrzeit mehr.
Hallo,
danke für die Info. Werde alles wandeln.
Hallo Dierk,
Hier kannst du auch noch was darüber erfahren:
http://www.donkarl.com?FAQ2.10 (http://www.donkarl.com?FAQ2.10)
gruss ekkehard
Hallo!
Ich überschreibe für die Zeitformatierung die Format-Funktion und erweitere sie mit der Excel-Syntax [h] für Zeiten über 24 Stunden.
Auszug aus StringTools (http://source.access-codelib.net/filedetails.php?repname=CodeLib+(Entwurf%2C+branches%2Fdraft)&path=%2Ftext%2FStringTools.bas):
Public Function Format(ByVal Expression As Variant, Optional ByVal FormatString As Variant, _
Optional ByVal FirstDayOfWeek As VbDayOfWeek = vbSunday, _
Optional ByVal FirstWeekOfYear As VbFirstWeekOfYear = vbFirstJan1) As String
Dim Hours As Long
If Not IsDate(Expression) Then
If IsNumeric(Expression) Then ' falls Zeitberechnung übergeben wird, ohne auf CDate zu konvertieren
If InStr(1, Replace(FormatString, "[hh]", "[h]"), "[h]") > 0 Then
Expression = CDate(Expression)
End If
End If
End If
If IsDate(Expression) Then
If InStr(1, FormatString, "[h", vbTextCompare) > 0 Then
Hours = Fix(Round(CDate(Expression) * 24, 1))
If Abs(Hours) < 24 Then
FormatString = Replace(FormatString, "[hh]", "hh", , , vbTextCompare)
FormatString = Replace(FormatString, "[h]", "h", , , vbTextCompare)
Else
FormatString = Replace(FormatString, "[hh]", "[h]", , , vbTextCompare)
FormatString = Replace(FormatString, "[h]", Replace(CStr(Hours), "0", "\0"), , , vbTextCompare)
End If
End If
End If
Format = VBA.Format$(Expression, FormatString, FirstDayOfWeek, FirstWeekOfYear)
End Function
Anwendung:
EZeit: Format(Summe((([Dauer imin]/1,6667)/60)/24);"[hh]:nn")
mfg
Josef