VBA Dateadd格式 - 需要总分钟数

时间:2016-12-22 10:56:31

标签: vba formatting

我在Microsoft Excel中有一个用户表单,我想用作秒表。然而,“hh:mm”的格式不允许它超过23:59,因为它会回到00:00

Private Sub SpinButton2_SpinUp()

If InsertEvent.TextBox1 = vbNullString Then
InsertEvent.TextBox1 = "00:00"

Else

InsertEvent.TextBox1.Value = Format(DateAdd("n", 1,       InsertEvent.TextBox1.Value), "hh:mm")
'InsertEvent.TextBox1.Value = TimeValue("mm:ss")
'InsertEvent.TextBox1.Value = Format(InsertEvent.TextBox1.Value, "hh:mm")

End If

End Sub 

有没有格式化这个,以便它可以作为总分钟的时钟?理想情况下,我需要它大约125分钟左右(125:00),但它是无限制无关紧要。

1 个答案:

答案 0 :(得分:4)

您不能使用内置的日期/时间功能,因为您希望表示不是日期/时间。

假设您想要将微调器值读入文本框:

Private Sub SpinButton2_SpinUp()
    Dim minutes As Integer: minutes = Val(InsertEvent.SpinButton2.Value)
    Dim hh As Integer:      hh = minutes \ 60
    Dim mm As Integer:      mm = minutes - (hh * 60)

    InsertEvent.TextBox1.Text = Format$(hh, "00") & ":" & Format$(mm, "00")
End Sub

要使用文本框中手动输入的值作为起点/下点,您需要将“hh:mm”重新解析为分钟,例如在文本框中退出事件:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If (IsNumeric(TextBox1.Text)) Then
        '// entering a number only assumes its minutes
        SpinButton2.Value = TextBox1.Text
        Exit Sub
    End If

    Dim hhmm() As String: hhmm = Split(TextBox1.Text, ":")
    If (UBound(hhmm) = 1) Then
        If (IsNumeric(hhmm(0)) And IsNumeric(hhmm(1))) Then
            SpinButton2.Value = (hhmm(0) * 60) + hhmm(1)
            Exit Sub
        End If
    End If

    SpinButton2.Value = 0
End Sub

(应该添加错误检查溢出/超过微调器.Max属性)