Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
Сделала лист, кнопку. Написала
  If Range("Значение";).Value > 0.005 Then
    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 в кавычках. С ними работает ;)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам