VBA - Access 2010 - 如果超过2天,则无法以DD:HH:MM格式显示总分钟数

时间:2014-12-11 20:27:03

标签: ms-access time access-vba ms-access-2010

我需要在VBA for Access 2010中将总分钟转换为DD:HH:MM格式.HH:MM很简单,我可以像这样在24小时内解决总时间:

If total / 1440 > 1 Then
    tbTimeTotal.Value = "1:" & Format(total / 60 / 24, "hh:nn")
Else
    tbTimeTotal.Value = Format(total / 60 / 24, "hh:nn")
End If

但我尝试过的超过48小时的解决方案无效:

首先尝试:

If total / 2880 > 2 Then
    tbTimeTotal.Value = "2:" & Format(total / 60 / 24, "hh:nn")
ElseIf total / 1440 > 1 And total / 2880 < 2 Then
    tbTimeTotal.Value = "1:" & Format(total / 60 / 24, "hh:nn")
Else
    tbTimeTotal.Value = Format(total / 60 / 24, "hh:nn")
End If

第二次尝试:

If total > 2880 Then
    tbTimeTotal.Value = "2:" & Format(total / 60 / 24, "hh:nn")
ElseIf total > 1440 And total < 2880 Then
    tbTimeTotal.Value = "1:" & Format(total / 60 / 24, "hh:nn")
Else
    tbTimeTotal.Value = Format(total / 60 / 24, "hh:nn")
End If

连连呢?我可以尝试一种更优雅的方法吗?

1 个答案:

答案 0 :(得分:1)

使用DateAdd将您的总分钟数添加到第0天,这将为您提供日期/时间值。然后你可以使用日期&amp;使用该值创建自定义时间格式的时间和其他标准VBA函数。

以下是基于以下功能的一些示例:

? CustomTimeFormat(720)
12:00
? CustomTimeFormat(790)
13:10
? CustomTimeFormat(1510)
1:01:10
? CustomTimeFormat(2955)
2:01:15

请注意,您无需从您的问题中编写所有这些数学运算,因为VBA函数会自动处理这些细节。

Public Function CustomTimeFormat(ByVal pMinutes As Long) As String
    Dim lngDays As Long
    Dim strTime As String
    Dim strOutput As String
    Dim dteEquivalent As Date
    dteEquivalent = DateAdd("n", pMinutes, 0)
    lngDays = CLng(DateValue(dteEquivalent))
    strTime = Format(dteEquivalent, "hh:nn")
    strOutput = vbNullString
    If lngDays > 0 Then
        strOutput = lngDays & ":"
    End If
    strOutput = strOutput & strTime
    CustomTimeFormat = strOutput
End Function