Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Изменение формата времени при превышении 24 часов / 9 сообщений из 9, страница 1 из 1
20.06.2006, 11:32:26
    #33801975
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
Складываю скриптом VB время (1:23:44, 1:24:40, 1:13:11, 1:08:08) через переменную, но если сумма превышает 24 часа, то формат времени меняется на «31.12.1899 14:10:44», притом изменить его нельзя.
Что можно с этим сделать?

Тип переменной использую Date
...
Рейтинг: 0 / 0
20.06.2006, 13:21:22
    #33802401
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
складывайте время в скрипте при переводе его в целый числа, после того как понадобится в формате времени, перевести из числового вида в нормальный формат.
...
Рейтинг: 0 / 0
20.06.2006, 14:28:23
    #33802662
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
Я бы посоветовал все переводить в секунды, а потом формировать строку соответсвующего формата.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Public Sub SumTime()
    Dim dtmTime1 As Date
    Dim dtmTime2 As Date
    Dim dtmSumm As Date
    Dim lngSeconds As Long
    
    dtmTime1 = "14:05:01"
    dtmTime2 = "15:15:10"
    
    dtmSumm = dtmTime1 + dtmTime2
    
    ' Будет напечатано 31.12.1899 5:20:11.
    Debug.Print dtmSumm
    
    ' Будет напечатано 29:20:11.
    Debug.Print fnTime(fnSeconds(dtmTime1) + fnSeconds(dtmTime2))
End Sub

Public Function fnSeconds( _
  dtmTime As Date) As Long
    fnSeconds = TimeValue(dtmTime) *  24  *  3600 
End Function

Public Function fnTime( _
  lngSeconds As Long) As String
    fnTime = Format(lngSeconds \  3600 , "00") & ":" & _
      Format((lngSeconds \  60 ) Mod  60 , "00") & ":" & _
      Format(lngSeconds Mod  60 , "00")
End Function
...
Рейтинг: 0 / 0
20.06.2006, 15:02:04
    #33802853
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
Или следующим образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Sub SumTime2()
    Dim dtmTime1 As Date
    Dim dtmTime2 As Date
    Dim dtmSum As Date
    Dim lngDays As Long
    
    dtmTime1 = "14:05:01"
    dtmTime2 = "15:15:10"
    
    dtmSum = dtmTime1 + dtmTime2
    lngDays = Int(dtmSum)
    
    If lngDays >  0  Then
        Debug.Print Format(lngDays *  24  + Hour(dtmSum), "00") & _
          ":" & Format(Minute(dtmSum), "00") & _
          ":" & Format(Second(dtmSum), "00")
    Else
        Debug.Print dtmSum
    End If
End Sub
...
Рейтинг: 0 / 0
20.06.2006, 18:54:19
    #33803766
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
Спасибо большое за скрипт, дело продвигается. Но слетает на моменте, когда время превышает 24 часа.
Попробуйте:
dtmTime1 = "24:05:01"
dtmTime2 = "15:15:10"
поймете.
...
Рейтинг: 0 / 0
20.06.2006, 20:09:33
    #33803904
k-nike2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
Так вы каким образом получаете в условно своей программе значение
Код: plaintext
dtmTime1 = "24:05:01"
???

Если задаете значение прямо в программе, то используйте функцию
Код: plaintext
dtmTime1 = TimeSerial( 24 , 5 , 1 )

Если преобразовываете строку, то
Код: plaintext
1.
2.
time1 = "24:06:01"
arrTime = Split(time1, ":")
dtmTime1 = TimeSerial(arrTime( 0 ), arrTime( 1 ), arrTime( 2 ))

А если иначе, например, через действия с другими переменными, то все должно быть пучком и так.
...
Рейтинг: 0 / 0
21.06.2006, 10:58:16
    #33804651
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
VovaNaСпасибо большое за скрипт, дело продвигается. Но слетает на моменте, когда время превышает 24 часа.
Попробуйте:
dtmTime1 = "24:05:01"
dtmTime2 = "15:15:10"
поймете.

Все правильно. Значения даты и времени VBA хранят определенный момент времени, а не его промежуток, причем в переменной типа Date нет возможности хранить значение, большее 24 часов.
...
Рейтинг: 0 / 0
21.06.2006, 11:44:06
    #33804827
VovaNa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
AshtonВсе правильно. Значения даты и времени VBA хранят определенный момент времени, а не его промежуток, причем в переменной типа Date нет возможности хранить значение, большее 24 часов.
Я это понял, спасибо, а в каком типе можно?
...
Рейтинг: 0 / 0
21.06.2006, 14:12:26
    #33805606
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение формата времени при превышении 24 часов
Например, в текстовом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Public Sub SumTime2()
    Dim dtmTime1 As Date
    Dim dtmTime2 As Date
    Dim dtmSum As Date
    Dim lngDays As Long
    Dim strTime1 As String
    Dim strTime2 As String
    
    strTime1 = "24:05:01"
    strTime2 = "25:15:10"
    
    dtmTime1 = TimeSerial(Split(strTime1, ":")( 0 ), _
      Split(strTime1, ":")( 1 ), Split(strTime1, ":")( 2 ))
      
    dtmTime2 = TimeSerial(Split(strTime2, ":")( 0 ), _
      Split(strTime2, ":")( 1 ), Split(strTime2, ":")( 2 ))
    
    dtmSum = dtmTime1 + dtmTime2
    lngDays = Int(dtmSum)
    
    If lngDays >  0  Then
        Debug.Print Format(lngDays *  24  + Hour(dtmSum), "00") & _
          ":" & Format(Minute(dtmSum), "00") & _
          ":" & Format(Second(dtmSum), "00")
    Else
        Debug.Print dtmSum
    End If
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Изменение формата времени при превышении 24 часов / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]