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