Страницы: 1
RSS
VBA: преобразование типов, Type mismatch
 
Добрый день, подскажите пожалуйста почему когда делаем преобразование типа из String в Double
если значение строковой переменной = "1345" все ОК
если значение строковой переменной = "254.25" - Type mismatch
Спасибо
 
Замените тчк на зпт.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,я так и сделал в итоге
но получается что
Код
debug.Print Cdbl(247.02)
 247,02
debug.Print Cdbl("247.02") - Type mismatch 
 
jfd, для ВБА родной разделитель дробной части - тчк, а в системе у Вас (как и у меня) стоит зпт. Число и текст это разное. (это моё понимание, более компетентный ответ, увы, дать не могу ибо неуч :) )

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Ничего Вы не заменили. CDbl принимает в качестве разделителя целой и дробной части запятую. А Вы упорно точку ей подсовываете:
Код
Cdbl("247,02")
когда Вы пишите напрямую число
Cdbl(247.02)
это уже не текст и в функцию оно будет передано с запятой, т.к. VBA воспринимает записанные в VBE напрямую числа исключительно с точкой, но после компиляции они преобразуются в числа с разделителем запятая.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, человек показал, что число с точкой проходит, а текст с точкой - нет. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
человек показал
другой человек дописал свое сообщение :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,не совсем так, в своем решении я заменил через Replace тчк на зпт. Тут просто это не писал.
Вопрос больше был в том что и и с точкой и без точки в Double преобразуется строковое значение, но
Cdbl ("5145") - OK
Cdbl ("5145.01") - Type Mismatch
Вопрос больше теоретический и может быть не совсем правильный, но так, для общего развития было бы интересно
 
Цитата
jfd написал: я заменил через Replace тчк на зпт. Тут просто это не писал.
8-0 А почему у меня вот так работает: Cdbl(replace("247.02",".",","))
?
Цитата
jfd написал: Cdbl ("5145") - OK
Cdbl ("5145.01") - Type Mismatch
Цитата
The_Prist написал: это уже не текст и в функцию оно будет передано с запятой, т.к. VBA воспринимает записанные в VBE напрямую числа исключительно с точкой, но после компиляции они преобразуются в числа с разделителем запятая
Цитата
The_Prist написал:
Cdbl("247,02")
Разницы не замечаете?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,replace и преобразование с ним у меня работает, я может не так выразился, с этим проблем нет.
разницу между точкой и запятой тоже вижу
Попробую перефразировать. Если бы региональные настройки были USA (или т.п.) то CDbl("654.54") сработало бы?
 
Цитата
jfd написал:
Если бы региональные настройки были USA (или т.п.) то CDbl("654.54") сработало бы?
Да. Универсальный вариант Val(replace("247.02",",","."))
Val не зависит от локали.
Страницы: 1
Читают тему
Наверх