Страницы: 1
RSS
Получить тип данных, записанных в ячейке
 
Добрый день!
В столбцах B & G текстовые данные. Поэтому после запуска следующего кода:
Код
Sub Data_type()
    [K2] = TypeName([B2])
    [K3] = TypeName([G2])
End Sub                                          
ожидал увидеть на выходе что-то типа String, а выводит Range! Однако, нет такого типа данных в спецификации на TypeName, что тогда означает здесь Range?
 
 Range означает диапазон
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Судя по вопросу, Вы хотите получит тип данных в ячейке, а вот кодом получаете тип данных ячейки, который, как раз, и есть Range. Нужно понимать, что
Код
[B2]
эквивалентно
Код
Range("B2")
а свойство Range возвращает объект типа Range. У этого объекта есть свойство Value, с помощью которого можно получить доступ к значению в ячейке, Ваш код должен выглядеть так
Код
Sub Data_type()
    [K2] = TypeName([B2].Value)
    [K3] = TypeName([G2].Value)
End Sub        


Название темы, наверное, надо изменить на "Получить название типа данных в ячейке"
 
Если бы в этих столбцах было число, на выходе мы бы видели например Double или Date, в каком случае TypeName выведет String? Допустим диапазон был бы именованным, тогда логичным было бы получить в ответе Range, но здесь этого нет.
Цитата
Название темы, наверное, надо изменить на "Получить название типа данных в ячейке"
получение типа данных как раз не вызывает проблему, а непонятна логика работы кода, на мой взгляд здесь вообще логики нет.
 
Код
Sub Data_type()

    [K2] = TypeName([B2].Value)
    [K3] = TypeName([B2].Value2)

End Sub
Теперь на выходе даёт стринг) и стало понятно. Странно думал что .Value подразумевалось в коде по умолчанию, но вопрос прояснился, Спасибо.
Изменено: Glago - 17.11.2019 15:08:40
 
Цитата
Glago написал:  .Value подразумевалось в коде по умолчанию
Это если программа четко понимает, что Вы ожидаете. Поэтому не нужно экономить на символах , но писать явно, что хотите получить.
 
Цитата
Glago написал:
Однако, нет такого типа данных в спецификации на TypeName
Действительно, в документации невнятно написано (даже в оригинале). Для аргументов - объектов функция возвращает не "Object", как можно понять из документации, а наименование типа объекта (например, "Range", "Worksheet" и т.п.). Для неинициализированных переменных типа Object возвращается "Nothing".
Изменено: sokol92 - 17.11.2019 18:47:11
Владимир
 
Цитата
Glago написал:
Теперь на выходе даёт стринг
Код
Sub Data_type_Data()
    ' 'TypeName' provides information about a variable
    [K2] = TypeName([B2]) '=> 'Range' => object subtype
    [K3] = TypeName([G2]) '=> 'Range' => object subtype
    
    ' 'VarType' indicates the subtype of the variable
    [L2] = VarType([B2]) '=> '8' => 'String'
    [L3] = VarType([G2]) '=> '8' => 'String'
    
End Sub

;)  
Изменено: ocet p - 17.11.2019 20:45:36
Страницы: 1
Наверх