Преобразование секунд в часы, минуты, секунды, формат в Access VBA - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь преобразовать мои данные, чтобы они отображались в часах, минутах и ​​секундах.В настоящее время у меня есть данные, отображаемые в считанные часы, однако они округляются вверх или вниз из-за того, как они отформатированы.

Сервер, с которого я берусь, извлекает данные за считанные секунды, поэтому я просто преобразовал их в часы (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 голосов
/ 01 января 2019

Для этого вам понадобится пользовательская функция.Но сначала преобразуйте секунды в значение времени (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
0 голосов
/ 31 декабря 2018

Поскольку вы спросили о том, как это относится к 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

Первый пример, похоже, ваш случай, не так ли?

Он должен сделать то же самое в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...