|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.12.2010, 07:45 | #1 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
Написал программу, все работает кроме одного момента.
Написал программу, все работает кроме одного момента.
Вообщем смысл программы такой, пользователь вводит код товара и количество купленного товара, от количества купленного товара зависит скидка, если количество купленного товара меньше минимального, то скидка не предоставляется, о чёмм выводится сообщение, и если количество купленного товара больше, чем минимально необходимо, то скидка предоставляется. Когда пускаю программу выводится одно и тоже сообщение если купили больше чем необходимо, а также если купили меньше. Понимаю, что ошибка где-то в блоке If ... Then в цикле Do, однако найти не могу, логические вроде все правильные. ВОТ КОД ПРОГРАММЫ. За стиль не упрекайте, занимаюсь этим целых 4 месяца!!! Public Sub Пример9() Kodtovara = InputBox("Введите код товара", "Код товара") Kodtovara = UCase(Kodtovara) If Kodtovara = "" Then MsgBox "Вы не ввели код товара" Exit Sub End If Kolvo = InputBox("Введите количество приобретаемого товара", "Количество товара") If Kolvo = "" Then MsgBox "Вы не ввели количество приобретаемого товара" Exit Sub End If asd = 1 Do Until Range("A3").Offset(asd, 0) = "" And Range("B3").Offset(asd, 0) = "" And Range("C3").Offset(asd, 0) = "" & _ Range("D3").Offset(asd, 0) = "" kod = Range("A3").Offset(asd, 0) cena = Range("B3").Offset(asd, 0) minkol = Range("C3").Offset(asd, 0) skidka = Range("D3").Offset(asd, 0) stoimost = cena * Kolvo itog = stoimost * (1 - skidka) If kod = "" Then MsgBox "Вы ввели код товара который отсутствует в списке" Exit Sub ElseIf kod = Kodtovara And Kolvo < minkol Then MsgBox "Вы приобрели " & Kolvo & " единиц(ы) товара, Вам скидка не предоставляется, минимальный " & _ "заказ должен быть более " & Range("C3").Offset(asd, 0) & " единиц товара" Exit Do ElseIf kod = Kodtovara And Kolvo >= minkol Then MsgBox "Вы приобрели " & Kolvo & " единиц товара " & Kodtovara & ". " & _ " Общая стоимость составляет " & Format(stoimost, "$#.00") & ". Поскольку приобретено больше " & minkol & " единиц" & _ ", то Вам предоставляется скидка в размере " & FormatPercent(skidka, 2) & " от общей стоимости " & _ ". Итого стоимость с учетом скидки равна " & itog & "." Exit Do Else asd = asd + 1 End If Loop End Sub |
09.12.2010, 09:29 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Не хватает AND (?) перед
Range("D3").Offset(asd, 0) = ""
webmoney: E265281470651 Z422237915069 R418926282008
|
09.12.2010, 11:40 | #3 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Код:
Код:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
09.12.2010, 13:30 | #4 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
ваше сравнение if Kolvo < minkol then ... всегда будет False потому что Kolvo - это строка, а minkol - скорее всего число, полученное из таблицы.
Да я думаю Вы правы, потому что пробывал просмотреть через Ф8, и там получается Kolvo показывет в кавычках, а minkol без кавычек, пытался понять, почему это так, но так не понял. Спасибо за ответ! Просмотрел Ваш код, я так понял Вы мой привели в "божеский" вид, спасибо и за это!!!! Последний раз редактировалось Palomnik1096; 09.12.2010 в 13:33. |
09.12.2010, 14:40 | #5 | ||
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
Цитата:
устранить несоответствие можно несколькими путями: 1.показан в коде - конвертировать строку в число (в примере в Double) Kolvo = CDbl(InputBox("Введите количество приобретаемого товара", "Количество товара")) 2.хорошая практика обьявлять типы переменных. Dim Kolvo as Double ... Kolvo = InputBox("Введите количество приобретаемого товара", "Количество товара") в этом случае Бейсик сам приведет тип к "правильному". если InputBox вернул "27", то Kolvo станет равно 27. В случае без обьявления типов Kolvo получало тип соответствующий результату функции InputBox, а это строка. Цитата:
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
||
09.12.2010, 14:56 | #6 |
Пользователь
Регистрация: 12.11.2010
Сообщений: 83
|
2.хорошая практика обьявлять типы переменных.
Dim Kolvo as Double В 99% случаев всегда объявляю (по книжке ведь учусь, а там как написано так и делаю), но в этот раз просто было лень кучу переменных писать, вот и поплатился за лень, два дня мучился с этой программой!!!! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Автофильтр (AutoFilter), как отфильтровать данные все кроме.? | SAIIIA.P | Microsoft Office Excel | 8 | 30.06.2022 19:33 |
Обрезать все кроме цифр, Дельфи | TorchWood | Работа с сетью в Delphi | 8 | 01.08.2015 17:36 |
Как скрыть все листы в ЕКСЕЛЕ кроме определенного списка | sasha_prof | Microsoft Office Excel | 2 | 03.12.2010 21:09 |
Закрыть все файлы Excel,кроме текущего | BesTiYa | Microsoft Office Excel | 5 | 10.12.2009 12:53 |
Написал программу, помогите натянуть Шейдеры или как нибудь модифицировать программу | WMLite | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 16.06.2009 13:57 |