在Access VBA中将秒转换为时分秒格式

时间:2018-12-31 19:29:41

标签: vba ms-access time

我正在尝试将我的数据转换为以小时,分钟和秒为单位显示。我目前仅在几个小时内显示数据,但是由于我格式化的方式,它正在向上或向下取整。

我要从中提取的服务器在几秒钟内提取了数据,因此我只需做一下(Sum(AuxTime)/3600.0)就将其转换为小时。但我需要[H]:mm:ss格式。

我尝试过然后直接从Access查询(AuxTime)中的服务中提取数据。然后在我的VBA模块中,我将数字格式设置如下:

 With .PivotFields("Aux_Time")
    .Orientation = 4
    .Function = -4157
    .NumberFormat = "[h]:mm:ss"
    .Caption = "Time Spent in Aux Time"
 End With

但是,并不是将数据以这种格式放置,而是将所有秒数都放置在小时区域中。

我还有什么想念的吗?

2 个答案:

答案 0 :(得分:0)

自从您询问与VBA有关的问题...

Format(12345.123,"hh:mm:ss")              results in   02:57:07
Format(#12/31/2018 15:32:01#,"hh:mm:ss")   results in   15:32:01

第一个例子似乎就是您的情况,不是吗?

它在查询中应该做同样的事情。

答案 1 :(得分:0)

您将需要一个自定义功能。但是,首先将秒转换为时间值(每天86400秒),然后将其格式化为文本:

Display = FormatHourMinuteSecond(CDate(Sum(AuxTime) / 86400))

使用如下函数:

Public Function FormatHourMinuteSecond( _
  ByVal datTime As Date, _
  Optional ByVal strSeparator As String = ":") _
  As String

' Returns count of days, hours, minutes, and seconds of datTime
' converted to hours, minutes, and seconds as a formatted string
' with an optional choice of time separator.
'
' Example:
'   datTime: #10:03:55# + #20:01:24#
'   returns: 30:05:19
'
' 2014-06-17. Cactus Data ApS, CPH.

  Dim strHour       As String
  Dim strMinuteSec  As String
  Dim strHours      As String

  strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
  ' Add leading zero to minute and second count when needed.
  strMinuteSec = Right("0" & CStr(Minute(datTime)), 2) & strSeparator & Right("0" & CStr(Second(datTime)), 2)
  strHours = strHour & strSeparator & strMinuteSec

  FormatHourMinuteSecond = strHours

End Function  ' Add leading zero to minute count when needed.
  strMinute = Right("0" & CStr(Minute(datTime)), 2)
  strHourMinute = strHour & strSeparator & strMinute

  FormatHourMinute = strHourMinute

End Function