Страница: 1 |
Вопрос: Перенос программы из MS Excel 2003 в 2007 | Добавлено: 03.07.08 18:41 |
Автор вопроса: ![]() |
Подскажите, пожалуйста! Я не знаю VBA. Есть прога, которая работала в 2003 Excel, а в 2007 работает неверно. Ошибка в том, что есть ячейка с вещественным числом (проценты) и кнопка на листе. При нажатии на кнопку, вещественное значение в ячейке уменьшается. Вначале все адекватно работает (с 2-0.5=1.5%) и т.д. НО!!! Когда 1-0.5=0.500000000001 что-то такое получается.
If Range("Значение").Value = 0.005 Then MsgBox "Значение не может быть меньше 0.5%!" Exit Sub End If Call Commit Sheets("Таблица").Unprotect If Range("Значение").Value = 0.01 Then Range("Значение").Value = 0.005 Else Range("Значение").Value = Range("Значение").Value - 0.005 End If Если даже добавить строчку на проверку: If Range("Значение").Value = 0.01 Then ... все равно равенство не выполняется, хотя и в ячейке написан 1%!!! В чем тут проблема? Заранее спасибо за ответ! |
Ответы | Всего ответов: 9 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #1 | Добавлено: 03.07.08 23:32 |
Ну числа с плавающей запяток могут давать такую погрешность.
По сути вопроса ничего не ясно, попробуй более точно сформулировать |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #2 | Добавлено: 04.07.08 06:56 |
Можно попробовать Round(Range("Значение"![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #3 | Добавлено: 04.07.08 06:57 |
Ну, я не знаю, как лучше написать... Можно сделать лист в Экселе и добавить кнопку. Обработчик ее написан выше. Начальное значение в ячейке = 2%. Вот. Вместо того, чтобы выдавать сообщение на 0.5% (нельзя дальше уменьшать!), обработчик не срабатывает, а уменьшает %-ты и значение
уходит в минус. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #4 | Добавлено: 04.07.08 09:08 |
Сделала лист, кнопку. Написала If Range("Значение"
![]() Range("Значение" ![]() ![]() Else Range("Значение" ![]() MsgBox "Значение не может быть меньше 0.5%!" End If Работает, на 0.5% ругается. ![]() |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #5 | Добавлено: 04.07.08 13:29 |
я написала вот так:
If Range("Значение" ![]() MsgBox "Значение не может быть меньше 0.5%!" Exit Sub End If Call Commit Sheets("Таблица" ![]() If Range("Значение" ![]() Range("Значение" ![]() Else Range("Значение" ![]() ![]() End If Если писать в кавычках, то проверка делается. Может у меня тип данных где-то не тот? Правда, я не нашла где он вообще прописан ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #6 | Добавлено: 07.07.08 07:30 |
Проверь формат данных в ячейке и в макросе. Если в ячейке через точку, то и в макросе проверку нужно делать с точкой. Еще посмотри какой у тебя разделитель дробной части стоит в системе. |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #7 | Добавлено: 07.07.08 13:07 |
У меня стоит разделитель "запятая". Но когда я проверку делала с запятой:
Range("Значение" ![]() то excel ругался на синтаксис. А когда меняю в Excel разделитель на "точку", то тоже неверно работает. PS Спасибо всем большое, что помогаете разобраться! |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 23 Ответов: 417 |
Профиль | Цитата | #8 | Добавлено: 07.07.08 15:03 |
Ээээ... Еще одно предположение. Поставь в системе разделитель "точка". В Excel формат Проценты и Количество знаков 2. И прогони пошагово. Что пишет ? |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 1 Ответов: 4 |
Профиль | Цитата | #9 | Добавлено: 08.07.08 12:18 |
В Excel поставила разделитель "точка". Для ячейки указала формат "проценты" и количество знаков = 2. Уходит в "минус" все равно. Наверное, оставлю проверку как раньше: 0.005 в кавычках. С ними работает ![]() |
Страница: 1 |
|