Страницы: 1
RSS
при вводе не целого числа выдает ошибку
 
Прошу помощи...  
При вводе не целого в любой верхний текстбокс нажимаю кнопку далее - появляются расчеты  
При попытке выбрать чекбокс или optionbutton выдает ошибку...    
что я не учел в коде, подскажите плиз
 
вводил и целые и не целые, выбирал и чекбоксы и оптионы, нет ошибки ?!
Редко но метко ...
 
Не учли десятичный разделитель - у меня есть ошибка.  
Из текстбокса перекидывает на лист с запятой (как удобно вводится с цифровой клавиатуры), а мне нужна точка.
 
Насчет разделителя не знаю, а вот то что textbox.value напрямую загоняется в long - это есть.
 
и как это исправить? я начинающий - объясните, если кто может, а лучше скиньте примерчик или хотя бы ссылочку
 
>Насчет разделителя не знаю, а вот то что textbox.value напрямую загоняется в long - это есть.  
 
Double  
 
41541
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
заменил  Long на Double - та же фигня...
 
CDbl,CLng,Val...
 
У меня требует такого:  
 
Private Sub TextBox13_Change()  
Dim sep_$  
sep_ = Mid(1 / 2, 2, 1)  
' ввод данных в ячейки листа из тексбокса "площадь"  
ActiveWorkbook.Sheets(1).Range("C2").Value = Replace(UserForm1.TextBox13.Value, ",", sep_)  
End Sub  
 
Можно переменную sep_ (куда вытянут десятичный разделитель системы) сделать Public и определить один раз при открытии книги или формы.  
Так же возможно есть смысл заменить ещё поверх и точку на sep_ - будет универсальнее.  
Или менять эти символы сразу при вводе по KeyPress (заодно там сразу отсечь возможность ввести текст, что сейчас не сделано).  
Или менять раскладку на английскую при активации текстбокса - у меня например глючит только на русской раскладке, когда на цифровой клавиатуре вместо точки вводится запятая.  
И кстати вводить в ячейки листа стОит уже преобразованный в числа текст текстбокса - т.е. желательно всему поверх ещё накатить CDbl()
 
а можно поподробнее или пример какой-нить
 
В чекбоксах вместо  
xxx = textbox1.value  
запишите  
xxx = CLng(textbox1.value)  
 
textbox1.value - String  
xxx - Long
 
чё-то никак не пойму, скиньте пример, пожалуйста. я новичок в этом, мне лучше один раз увидеть, как говорится
 
Может быть такой тандем? (избитая тема... :) )  
 
Private Sub TextBox13_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
Dim sep_$  
sep_ = Mid(1 / 2, 2, 1)  
   On Local Error Resume Next  
   ' ограничение на количество введённых символов  
   If Len(Me.TextBox13) >= 10 Then KeyAscii = 0  
   ' если в поле введена не цифра, то заменяем её на системный разделитель  
   If Not IsNumeric(Chr$(KeyAscii)) Then KeyAscii = Asc(sep_)  
End Sub  
 
Private Sub TextBox13_Change()  
ActiveWorkbook.Sheets(1).Range("C2").Value = ""  
' ввод данных в ячейки листа из тексбокса "площадь"  
If IsNumeric(UserForm1.TextBox13.Value) Then ActiveWorkbook.Sheets(1).Range("C2").Value = CDbl(UserForm1.TextBox13.Value)  
End Sub
 
Hugo, попоробовал - все равно при нажатии чекбокса - ошибка  
для информации - основной алгоритм работы такой:  
в верхние тексбоксы вводятся числа, в т. ч. с десятыми и сотыми; из них эти числа должны уходить на рабочий лист при нажатии кнопки "далее". Далее на рабочем листе производятся расчеты, результаты которых выводятся в текстбоксы внутри Frame. После этого производится выбор нужных опций с помощью OptionButton и CheckBox, результаты выбранных опций выводятся в оставшиеся текстбоксы при нажатии "расчет".  
 
Потом можно изменять выбранные OptionButton и CheckBox, чтобы можно было увидеть общую сумму в том или ином наборе опционов, естесственно после повторного нажатия "рассчет"
 
У меня ошибка - если начинать жмакать баттоны при пустых нижних текстбоксах.  
Это легко устранить - проверить сперва на то, есть ли там цифра. Если нет - грозно обругать (или нет) и вернуть баттон назад (т.е. если включен - выключить и наоборот)  
Как-то так, нужно продумать, как лучше сделать...
 
у меня ошибка и при заполненных текстбоксах
 
может кто-нибудь помочь? очень нужно!!!
 
Я что мог - уже сделал.  
Всю форму переделывать не буду.  
Скажите хоть, что за ошибка, чтоб помощники знали - а то например у меня неисправленных ошибок нет.
 
сделал скриншоты  
при вводе данных и нажатии "далее" расчет во Frame происходит, выбираю OptionButton - всё ОК (см картинку 1), дальше выбираю CheckBox тут же выскакивает ошибка (картинка 2 и 3)  
где косяк? помогите!!!  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Размер!!!  
 
Я думаю, что вся беда в десятичных разделителях.  
У меня на листе точки, как нужно коду, а у Вас запятые.  
Заменяйте запятые на точки при помещении на форму с листа:  
 
Private Sub CommandButton1_Click()  
   Dim sep_$  
   sep_ = Mid(1 / 2, 2, 1)  
 
   With ActiveWorkbook.Sheets(1)  
       ' ввод данных из расчетных ячеек в текстбоксы "фундамент"  
 
       Me.TextBox1.Value = Replace(.Range("C6").Value, ",", sep_)  
       Me.TextBox2.Value = Replace(.Range("C7").Value, ",", sep_)  
       Me.TextBox3.Value = Replace(.Range("C8").Value, ",", sep_)  
       Me.TextBox4.Value = Replace(.Range("C9").Value, ",", sep_)  
       Me.TextBox5.Value = Replace(.Range("C10").Value, ",", sep_)  
 
       ' ввод данных из расчетных ячеек в текстбоксы "доп.опции"  
 
       Me.TextBox7.Value = Replace(.Range("C11").Value, ",", sep_)  
       Me.TextBox8.Value = Replace(.Range("C12").Value, ",", sep_)  
       Me.TextBox9.Value = Replace(.Range("C13").Value, ",", sep_)  
       Me.TextBox10.Value = Replace(.Range("C14").Value, ",", sep_)  
       Me.TextBox11.Value = Replace(.Range("C15").Value, ",", sep_)  
 
   End With  
End Sub  
 
Тут бы ещё предусмотреть обратный вариант, ну да ладно - мне это не помешало.
 
спасибо!!  
еще вопрос - можно как-нибудь избавиться от кнопки "далее", т.е. при вводе новых значений все расчеты в текстбоксах внутри  Frame изменялись сразу
 
Mожно.  
Чтоб много не ломать - на примере TextBox13 (кстати, на остальные (TextBox14 и 16) тоже аналогично измените, не забудьте TextBoxN_KeyPress добавить, кнопку можно убрать, да и имя макроса CommandButton1_Click тоже можно изменить):  
 
Private Sub TextBox13_Change()  
   ActiveWorkbook.Sheets(1).Range("C2").Value = ""  
   ' ввод данных в ячейки листа из тексбокса "площадь"  
   If IsNumeric(UserForm1.TextBox13.Value) Then  
   ActiveWorkbook.Sheets(1).Range("C2").Value = CDbl(UserForm1.TextBox13.Value)  
   CommandButton1_Click  
   End If  
End Sub
 
Ещё - тут так исправил, чтоб сразу старые данные очищало:  
 
Sub start()  
[c2:c4].Clear
   UserForm1.Show  
End Sub
 
Ещё - заметил, что не используются "введенные данные из окна3".  
Тут нет ошибки?
 
спасибо! не совсем, правда понял про TextBoxN_KeyPress - это вообще мой первый опыт в vba, но постараюсь разобраться. Если не получится снова буду бросать клич о помощи.  
Сейчас ушел с работы - сижу дома, а тут у меня OpenOffice.org Calc вместо excelа - вообще волосы шевелятся - совсем другой интерфейс.  
И кнопка запуска UserForm не срабатывает.  
Растет желание сделать харакири.. :-(
 
KeyPress - это срабатывает на ввод символа. Сразу заменяет введённое на то, что нам нужно.  
 
 
Ух ты, такого не помню:  
-=33333=-
Страницы: 1
Читают тему
Наверх