2016-12-22 4 views
2

У меня есть пользовательская форма в Microsoft Excel, которую я хочу использовать в качестве секундомера. Однако формат «чч: мм» не позволяет ему идти выше 23:59, как это восходит к 00:00Формат VBA Dateadd - требуется всего минут

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), но не имеет значения, неограниченно ли он.

ответ

4

Вы не можете использовать встроенные функции Date/Time для этого, поскольку вы хотите, чтобы представление, которое не является датой/временем.

Предполагая, что вы хотите прочитать значение вращателя в текстовое поле:

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 

Чтобы использовать введенное вручную значение из текстового поля в качестве исходного вверх/вниз точки вы должны повторно разбор «чч: мм» обратно минут, например, в случае текстового поля Выход:

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 недвижимость)

+0

Спасибо! Похоже, что это почти то, что мне нужно, однако, если я введу число в текстовое поле и хочу увеличить/уменьшить, используя кнопку со стрелкой, это не сработает. Он работал с моей оригинальной датой ... Например, если я набираю 20:00 на часы, чтобы начать с этого, а затем нажмите кнопку «spin up», она начнется с 00:00 ... –

+0

Возможность сделать это тривиально потеряно, обновлено выше. –