TextBox вставка числового значения.

Программирование на Visual Basic for Applications
Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

TextBox вставка числового значения.

Сообщение Терминатор » 31.01.2005 (Пн) 22:14

Вопрос простой, но я с этим раньше не сталкивался.
В TexBox находяшийся на форме ввожу числовые значения
от 0,1 до 0,9 далее по нажатию кнопки, введённые данные перемещаются на лист в ячейку.Но выводятся они в текстовом формате. Но так как мне надо производить вычисления, это приводит к ошибке. Как избежать этого?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 01.02.2005 (Вт) 9:34

Используй функцию CDbl:

Код: Выделить всё
    Cells(1, 1).Value = CDbl(TextBox1.Value)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 01.02.2005 (Вт) 9:34

ЗЫ Надеюсь, понятно, что это не "сды" а "си-ди-би-эл" :D
Быть... или не быть. Вот. В чём вопрос?

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 01.02.2005 (Вт) 12:52

Спасибо! :lol:

(так между делом, если вводить числа от 1 и выше, подобного не происходит - Cells(1, 1) = TextBox1.Text , так можно всё жизнь проработать и не узнать о подобном ньюансе, ведь не всем требуется вводить столь малые числа)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.02.2005 (Вт) 13:23

Дело не в малости чисел, а в символе, используемом в качестве разделителя целой и дробной части.
Lasciate ogni speranza, voi ch'entrate.

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 01.02.2005 (Вт) 21:37

По ходу возник Error.
У меня на форме 5 TexBox, два раза из десяти мне необходимо в тот куда я ввожу 0,1 оставлять пустым. Вот в этом случае возникает ошибка. Теперь что из-за использования CDbl прийдётся дописать код на проверку или есть другой вариант. Для наглядности.
With ActivateSheets
Cells(2, 1) = TextBox1.Text
Cells(2, 2) = TextBox2.Text
Cells(2, 3) = TextBox3.Text
Cells(2, 4) = TextBox4.Text
Cells(2, 5).Value = CDbl(TextBox5.Value) ' Вот тут при пустом TextBox возникает Error
End With

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2005 (Ср) 5:04

  • Проверка на len(text)
  • Использование val вместо cdbl (и тогда "." вместо ",")
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 02.02.2005 (Ср) 12:42

Знаток GSerg, на тот случай если я не сталкнулся ещё с каким-нибудь Error, но он меня ждёт.
Тогда подскажите, пожалуйста, проверка на len() обязательна? Или скажем так, в каких случаях она обязательна.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 02.02.2005 (Ср) 12:57

Ну, CDbl от пустой строки обламывается, это факт.
Можно сделать, на мой взгляд, лучше - использовать не функцию длины строки, а функцию IsNumeric, которая, фактически, показывает, сработает ли CDbl. Это, заодно, защитит и от ошибок некорректного ввода. Т. е. если IsNumeric(TextBox1.Value)=TRUE, то присвоить ячейке значение CDbl, иначе пустую строку (или ничего не делаем, или выводим сообщение об ошибке etc.)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2005 (Ср) 15:55

Хочу отметить, что IsNumeric(Empty)=True :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 02.02.2005 (Ср) 16:06

Ага, а IsNumeric("") - False. И IsNumeric(TextBox1.Value) при пустом текстбоксе - тоже False. Так что, вроде бы, все работает :)


Вернуться в VBA

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

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

    TopList  
cron