Проверка переменной на принадлежность к типу время

Программирование на Visual Basic for Applications
AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Проверка переменной на принадлежность к типу время

Сообщение AHTOXA » 30.04.2003 (Ср) 16:29

Функция IsDate(date) - проверяет на принадлежность переменной к типу date, есть ли какая-нибудь функция которая-бы проверяла является-ли данная переменная временем.
Bandit

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 17:18

TypeName(Имя переменой) ="Date"
Если значение в ячейке, бери свойство Value а не Text

В переменной Date хранится и время и дата, нету переменных, которые хранят только время, для определения, наверно надо знать является ли переменная Date и если да, то преобразовать ее в текстовый формат и проверять программно на наличие соответствующих символов
Последний раз редактировалось Vitaly1 30.04.2003 (Ср) 17:21, всего редактировалось 1 раз.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 30.04.2003 (Ср) 17:20

А какая разница между Value или Text (вроде бы Text - read only и все)?
Bandit

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 17:25

Антоха
Text - только для чтения, и в нем преобразуется информация в ячейке в текстовый формат, внезависимости от того, какой она там была, числовой, дата и т.п.
Value - и для чтения, и для записи, она вариантного типа, принимает тот тип, взависимости от данных находящихся в ячейки

п.с.
Антоха - я продолжил свой предыдущей ответ

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 30.04.2003 (Ср) 17:31

Попробовал TypeName, так он мне возвращает: "Double"
Bandit

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 18:53

Как переменной назначал значение, как ее преобразовывал, можно фрагмент программы?

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 30.04.2003 (Ср) 18:56

Columns("B:B").Select
Selection.ColumnWidth = 12
Selection.NumberFormat = "hh:mm:ss"

dim var type as String
var_type = TypeName(ActiveSheet.Cells(i, 2).Value)
Bandit

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 19:19

Я запустил твою программу тип у меня Empty.
Не знаю почему у тебя другой:

sub proba
Columns("B:B").Select
Selection.ColumnWidth = 12
Selection.NumberFormat = "hh:mm:ss"

Dim var_type As String
var_type = TypeName(ActiveSheet.Cells(4, 2).Value)
MsgBox var_type
end sub
Последний раз редактировалось Vitaly1 30.04.2003 (Ср) 19:37, всего редактировалось 1 раз.

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 30.04.2003 (Ср) 19:26

ActiveSheet.Cells(row, col) думаю понятно
Bandit

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 30.04.2003 (Ср) 19:49

Действительно во веденной ячейке Duble????

Тогда можно только в непустой определить таким образом(передавать текстовое значение ячейки!):


function istime(s)
if mid(s,3,1)<>":" or mid(s,7,1)<>":" or len(s)<>8 then
istime = false
exit function
else
for i=1 to len(s)
If i<>3 and i<>7 then
if not (mid(s,i,1)>="0" and mid(s,i,1) <="9") then
istime = false
exit function
end if
end if
next i
istime =true
end function

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 30.04.2003 (Ср) 19:54

Можно проще:

On Error GoTo invalid_time
TimeValue (ActiveSheet.Cells(row, 2).Text)
GoTo ends
invalid_time:
MsgBox(" invalid time format")
Err.Clear
Resume ends
ends:
Bandit


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

    TopList