Страницы: 1
RSS
Textbox's от рук отбились! Точка vs Запятая.
 
В UserForm 56 текстбоксов.  
Большая часть считывает из таблицы цифры. С ними проблем нет.  
 
Другие складывают / вычитают. Эти творят, что хотят!  
Некоторые выводят результат с запятой в качестве разделителя целой и дробных частей.  
А некоторые с точкой.  
 
Пробовала форматировать текстбоксы - безрезультатно. Те, которые ставили точку, всё равно продолжают упорствовать.    
 
Никакой закономерности я не обнаружила.  
Пожалуйста! Посмотрите в чём может быть моя проблема.    
Скорее всего я слона не вижу :-/
 
Файл
 
Третья попытка прикрепить файл <BR><STRONG>Файл удален</STRONG> - велик размер. [Модераторы]
 
'Ввод в TextBox только чисел в заданном диапазоне  
'с заданным десятичным разделителем (нажимать можно и точку и запятую)  
'с ограничением количества десятичных разрядов  
Private Sub TextBox1_Change()  
 Const MIN = 0       '  минимальное значение  
 Const MAX = 100000000     ' максимальное значение  
 Const DECSEP = "."  ' дес. разделитель: запятая или точка  
 Const DECPLACES = 2 ' количество дес. разрядов  
 Dim i As Double, j As Integer, ds As String, s As String  
 Static old As String  
 If DECSEP = "." Then ds = "," Else ds = "."  
 On Error Resume Next  
 s = TextBox1  
 If Len(s) = 0 Then old = "": Exit Sub  
 s = Replace(Replace(s, " ", ""), ds, DECSEP)  
 TextBox1 = s  
 i = CDbl(Replace(s, DECSEP, Mid$(CStr(1.2), 2, 1)))  
 j = InStr(s, DECSEP)  
 If j > 0 Then j = Len(s) - j  
 If err <> 0 Or i < MIN Or i > MAX Or j > DECPLACES Then  
   TextBox1 = old  
 Else  
   old = TextBox1  
 End If  
 OKButton.Enabled = True  
End Sub  
 
в текстбокс вводятся только цифры с указанными ограничениями.
 
{quote}{login=slav}{date=07.12.2009 04:22}{thema=давно подсмотрено на этом форуме (кажись от ZVI)}{post}в текстбокс вводятся только цифры с указанными ограничениями.{/post}{/quote}  
Сейчас попробую "прикруть", но у меня там числа не вводятся в текстбокс в буквальном смысле, т.е. пользователем в форму. Числа считываются формой из таблицы (нормально), а потом Calculate самой формой. И вот тут как раз получается фигня :-( Причём странная частичная фигня.
 
{quote}{login=Жаба}{date=07.12.2009 04:44}{thema=Re: давно подсмотрено на этом форуме (кажись от ZVI)}{post}{quote}{login=slav}{date=07.12.2009 04:22}{thema=давно подсмотрено на этом форуме (кажись от ZVI)}{post}в текстбокс вводятся только цифры с указанными ограничениями.{/post}{/quote}  
Сейчас попробую "прикруть", но у меня там числа не вводятся в текстбокс в буквальном смысле, т.е. пользователем в форму. Числа считываются формой из таблицы (нормально), а потом Calculate самой формой. И вот тут как раз получается фигня :-( Причём странная частичная фигня.{/post}{/quote}
 
{quote}{login=Жаба}{date=07.12.2009 04:44}{thema=Re: давно подсмотрено на этом форуме (кажись от ZVI)}{post}{quote}{login=slav}{date=07.12.2009 04:22}{thema=давно подсмотрено на этом форуме (кажись от ZVI)}{post}в текстбокс вводятся только цифры с указанными ограничениями.{/post}{/quote}  
Сейчас попробую "прикруть", но у меня там числа не вводятся в текстбокс в буквальном смысле, т.е. пользователем в форму. Числа считываются формой из таблицы (нормально), а потом Calculate самой формой. И вот тут как раз получается фигня :-( Причём странная частичная фигня.{/post}{/quote}  
задайте фиксированный формат ячеек, с которых считываются данные в текстбоксы
 
{quote}{login=}{date=07.12.2009 04:47}{thema=Re: Re: давно подсмотрено на этом форуме (кажись от ZVI)}{post}{quote}{login=Жаба}{date=07.12.2009 04:44}{thema=Re: давно подсмотрено на этом форуме (кажись от ZVI)}{post}{quote}{login=slav}{date=07.12.2009 04:22}{thema=давно подсмотрено на этом форуме (кажись от ZVI)}{post}в текстбокс вводятся только цифры с указанными ограничениями.{/post}{/quote}  
Сейчас попробую "прикруть", но у меня там числа не вводятся в текстбокс в буквальном смысле, т.е. пользователем в форму. Числа считываются формой из таблицы (нормально), а потом Calculate самой формой. И вот тут как раз получается фигня :-( Причём странная частичная фигня.{/post}{/quote}  
задайте фиксированный формат ячеек, с которых считываются данные в текстбоксы{/post}{/quote}  
 
Дык формат ячеек, с которых считываются данные фиксированный.  
И с текстбоксами, в которые попадает информация, проблем нет.  
Ерунда с теми, которые выводят результаты подсчётов. И то не со всеми, а только с частью.
 
Попробуйте извлекать данные из TextBox таким способом:  
= Val(Replace(TextBox1, ",", "."))
 
{quote}{login=Юрий М}{date=07.12.2009 04:55}{thema=}{post}Попробуйте извлекать данные из TextBox таким способом:  
= Val(Replace(TextBox1, ",", ".")){/post}{/quote}  
Ой! Работает!!!  
Ура! Спасибо большое!
 
Я могу посоветовать другое.  
TextBox - всегда текст, поэтому все значения присваивайте и делайте с ними математические операции только с TextBox.Text (и не в коем случае с TextBox.Value). Скрытые преобразования все сделают правильно...  
 
Здесь пример математики на TextBox-ах...  
 
http://www.planetaexcel.ru/docs/forum_upload/post_63734.xls
 
VovaK, у Вас совет расходится с примером.  
>>делайте с ними математические операции только с TextBox.Text (и не в коем случае с TextBox.Value)  
а в примере видим:  Me.TextBox3.Text = (Me.TextBox1.Value * Me.TextBox2.Value)  
Нет разницы между TextBox.Text и TextBox.Value. И то, и другое - String
Bite my shiny metal ass!      
 
Поверьте Лузер разница есть. Сейчас не помню, но у меня были проблемы с десятичной точкой, когда приходилось перемножать значения тпа 3.14256 на значение TextBox. Так вот .Value дает странный результат, я даже не мог понять что он преподносит, .Text считает корректно. Сам выстрадал, когда калькулятор писал...    
 
А в примере разницы нет потому что коэффициентов нет...
 
Поправлюсь, вахно присваивать результат TextBox.Text - результат будет возвращать запятую, в то время как если присваивать значение TextBox.Value - будет отображаться точка. Такое значение при последующем преобразовании может дат некорректный результат.
 
Что будет отображать .Text зависит от выбранного десятичного разделителя. А чтобы от него не зависеть, как раз и следует явно выполнять преобразование. Как советовал Юрий.  
Если все преобразования сразу делать, то и страдать не придется :)
Bite my shiny metal ass!      
 
Вся прелесть этого преобразования, что НЕ надо менять точку на запятую. Разделитель (нужный) встанет сам...    
 
А вообще уважаю VBA за то, что решение может быть многовариантно.
 
В таком разрезе - согласен.  
Но возможна ситуация, когда сбойнет.
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=07.12.2009 10:52}{thema=}{post}В таком разрезе - согласен.  
Но возможна ситуация, когда сбойнет.{/post}{/quote}  
 
Лузер, ну не лукавьте, какая такая ситуация?  
 
Я специально изменил в книге разделитель и стал пытать калькулятор (там можно ввести только запятую в качестве разделителя) и сам очень сильно удивился. Считает корректно.
 
Разделитель в книге ни причем, мы же про форму? А вот в системе - очень даже.  
Я заметил про запятую. И в этом дело. Что делать тем, кто привык к точке?  
Строго говоря нужно разрешить вводить только десятичный разделитель.  
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> Asc(Mid(1 / 2, 2, 1)) Then KeyAscii = 0  
Так разрешим вводить только цифры и системный разделитель.  
Настройки экселя можно учесть отдельно.  
 
Кстати, попробуйте изменить в системе запятую на точку и посмотрите на результат (TextBox3)
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=08.12.2009 10:04}{thema=}{post}Разделитель в книге ни причем, мы же про форму? А вот в системе - очень даже.  
Я заметил про запятую. И в этом дело. Что делать тем, кто привык к точке?  
Строго говоря нужно разрешить вводить только десятичный разделитель.  
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> Asc(Mid(1 / 2, 2, 1)) Then KeyAscii = 0  
Так разрешим вводить только цифры и системный разделитель.  
Настройки экселя можно учесть отдельно.  
 
Кстати, попробуйте изменить в системе запятую на точку и посмотрите на результат (TextBox3){/post}{/quote}  
 
Как прикрутить разделитель мне очень понравилось, изящно. Но не меняя разделитель в форме (осталась запятая) я заменил запятую на точку на книге (Параметры-Международная- поставил точку - надеюсь все правильно сделал) и форма считает правильно, парадокс?
 
А я не говорил, что будет врать.  
Просто в TextBox3 отображается точка, а в первых двух запятая. Вот где парадокс :)
Bite my shiny metal ass!      
Страницы: 1
Читают тему
Наверх