| 
| 
 | Вопрос # 3 379/ вопрос открыт / | 
 |  Excel 2007 VB 6.5
 Доброго времени суток, уважаемые эксперты!
 
 Подскажите как произвести вычисление, если в TextBox число с десятичными значениями разделяется точкой, а ячейка .Cells(i, 5).Value имеет числовой формат с десятичными значениями через запятую?
 
 .Cells(i, 5).Value = UserForm1.TextBox3.Text + .Cells(i, 5).Value
 
|  |   Вопрос задал: resseg (статус: Посетитель)Вопрос отправлен: 8 ноября 2009, 23:51
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Егор Здравствуйте, resseg!Сталкивался с подобным. Нашёл для себя такой выход - менять запятую на точку ещё на этапе ввода:
 
 
 Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If VBA.Chr(KeyAscii) = "," Then KeyAscii = VBA.Asc(".")
End SubТеперь при вводе запятой она будет меняться на точку сама.
 Мы, кстати, подобный вопрос рассматривали в вопросе 3060
 
 Другой вариант - заменять точку на запятую перед преобразованием в число:
 
 
   .Cells(i, 5).Value = VBA.Val(VBA.Replace(UserForm1.TextBox3.Text, ",", ".")) + .Cells(i, 5).Value Код проверял в Excel 2003, поэтому, возможно, что-то не сработает в 2007-ом - пишите, разберёмся
 
|  | Ответ отправил: Егор (статус: 10-ый класс)Время отправки: 9 ноября 2009, 07:20
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 9 ноября 2009, 18:52; участников в обсуждении: 2. 
|   | resseg (статус: Посетитель), 9 ноября 2009, 17:13 [#1]:Использовал данный код 
 .Cells(i, 5).Value = VBA.Val(VBA.Replace(UserForm1.TextBox3.Text, ",", ".")) + .Cells(i, 5).ValueНа 2007 тоже работает. В дальнейшем не подведет? |  
|   | Егор (статус: 10-ый класс), 9 ноября 2009, 18:48 [#2]:да не должен Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | resseg (статус: Посетитель), 9 ноября 2009, 18:52 [#3]:Тогда спасибо. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |