Wiki der Access Code Library

Gemeinsam zu mehr Effizienz in der Anwendungserstellung

Format für mehr als 24 Stunden

Aus Access Code Library
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
K
K
Zeile 3: Zeile 3:
Für die formatierte Ausgabe eines Datum/Zeit-Wertes (Date-Datentyp) von mehr als 24 Stunden könnte man die Format-Funktion überschreiben und die Syntax von Excel nutzen.
Für die formatierte Ausgabe eines Datum/Zeit-Wertes (Date-Datentyp) von mehr als 24 Stunden könnte man die Format-Funktion überschreiben und die Syntax von Excel nutzen.
-
Beispiel: <code>Format(CDate(Now() - #1/1/2000#), "[hh]:nn:ss")</code>
+
Beispiel: <code>Format(Timeserial(60,30,15), "[hh]:nn:ss")</code> => ''60:30:15''
<source>
<source>
Public Function Format(ByVal Expression As Variant, Optional ByVal FormatString As Variant, _
Public Function Format(ByVal Expression As Variant, Optional ByVal FormatString As Variant, _
Zeile 18: Zeile 18:
             FormatString = Replace(FormatString, "[h]", "h", , , vbTextCompare)
             FormatString = Replace(FormatString, "[h]", "h", , , vbTextCompare)
         Else
         Else
-
             FormatString = Replace(FormatString, "[hh]", CStr(Hours), , , vbTextCompare)
+
             FormatString = Replace(FormatString, "[hh]", "[h]", , , vbTextCompare)
-
             FormatString = Replace(FormatString, "[h]", CStr(Hours), , , vbTextCompare)
+
             FormatString = Replace(FormatString, "[h]", Replace(CStr(Hours), 0, "\0"), , , vbTextCompare)
         End If
         End If
       End If
       End If

Version vom 13:29, 21. Jan. 2011


Für die formatierte Ausgabe eines Datum/Zeit-Wertes (Date-Datentyp) von mehr als 24 Stunden könnte man die Format-Funktion überschreiben und die Syntax von Excel nutzen.

Beispiel: Format(Timeserial(60,30,15), "[hh]:nn:ss") => 60:30:15

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 IsDate(Expression) Then
      If InStr(1, FormatString, "[h", vbTextCompare) > 0 Then
         Hours = Fix(Round(CDate(Expression) * 24, 1))
         If 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