Проблемы с операторами сравнения

Программирование на Visual Basic for Applications
Bercut
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 12.09.2006 (Вт) 9:29

Проблемы с операторами сравнения

Сообщение Bercut » 12.09.2006 (Вт) 9:44

Добрый день, Господа!
Может ли кто-нибудь помочь мне в моей беде?
Суть проблемы такова: есть код

Код: Выделить всё
   rm = TextBox1.Value
    If rm <= 1 Then
      MsgBox "sometext"
      Exit Sub
    ElseIf IsNumeric(rm) = "False" Then
      MsgBox "sometext"
      Exit Sub
    ElseIf 6 > rm > 1 Then
      ls = 15000 + (rm - 1) * 7000
    ElseIf 21 > rm > 5 Then
      ls = 43000 + (rm - 5) * 6000
    Else
      ls = 473000
    End If


при запуске скрипта переменная ls всегда принимает значение 473000, хотя переменная rm выводится правильно...скрипт выполняется так, будто в нем нет записей "ElseIf 6 > rm > 1 Then" "ElseIf 21 > rm > 5 Then"........может они не правильные?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Проблемы с операторами сравнения

Сообщение Viper » 12.09.2006 (Вт) 10:04

Полнейший бред!

Код: Выделить всё
   rm = TextBox1.Value
    If rm <= 1 Then
      MsgBox "sometext"
      Exit Sub
    ElseIf IsNumeric(rm) = "False" Then
      MsgBox "sometext"
      Exit Sub
    ElseIf 6 > rm > 1 Then
      ls = 15000 + (rm - 1) * 7000
    ElseIf 21 > rm > 5 Then
      ls = 43000 + (rm - 5) * 6000
    Else
      ls = 473000
    End If


Код: Выделить всё
rm = TextBox1.Value
If rm <= 1 Then
      MsgBox "sometext"
      Exit Sub
ElseIf IsNumeric(rm) = False Then
      MsgBox "sometext"
      Exit Sub
ElseIf rm > 1 And rm <6  Then
      ls = 15000 + (rm - 1) * 7000
ElseIf rm > 5 And rm < 21 Then
      ls = 43000 + (rm - 5) * 6000
Else
      ls = 473000
End If


Найди три отличия и вдумайся в бредовость первого варианта.

З.Ы. На кой проверять попадание rm в перекрывающиеся диапазоны?
Весь мир матрица, а мы в нем потоки байтов!

Bercut
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 12.09.2006 (Вт) 9:29

Сообщение Bercut » 12.09.2006 (Вт) 10:26

ага, понятно, просто я с ВБА второй день работаю....спасибо за ответ
самое интересно, что в другом месте такой вариант "6 > rm > 1" прокатил...странно, ну ладно

З.Ы. ну от значения rs меняется формула...или есть какой-то другой вариант без перекрывающихся диапазонов? буду весьма признателен, если просветишь

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 12.09.2006 (Вт) 10:27

Еще одна бредовость осталась... :)

Код: Выделить всё
If ***rm <= 1**** Then
      MsgBox "sometext"
      Exit Sub
ElseIf ***IsNumeric(rm)*** = False Then
Быть... или не быть. Вот. В чём вопрос?

Bercut
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 12.09.2006 (Вт) 9:29

Сообщение Bercut » 12.09.2006 (Вт) 11:02

uhm писал(а):Еще одна бредовость осталась... :)

Код: Выделить всё
If ***rm <= 1**** Then
      MsgBox "sometext"
      Exit Sub
ElseIf ***IsNumeric(rm)*** = False Then


ну тут не бредовость, если rm меньше или равен единице, то один текст, если не числовое значение, то другой

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.09.2006 (Вт) 11:07

А ты не думаешь, что проверка на не числовое значение должна идти несколько раньше, чем попытка сравнить с единицей?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bercut
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 12.09.2006 (Вт) 9:29

Сообщение Bercut » 12.09.2006 (Вт) 11:22

хм, не думал об этом, пожалуй ты прав, хотя в данном случае все и так работает

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.09.2006 (Вт) 11:32

Bercut писал(а):самое интересно, что в другом месте такой вариант "6 > rm > 1" прокатил...странно


Это в каком это? Этот вариант прокатит для любого rm > 1. Ибо результат сравнения например при rm = 10: 10 > 1 есть True, после преобразования в Integer будет -1, после чего произойдет сравнение 6 > -1, что естественно даст True и готово дело - получим True, тогда как по логике разработчика должно быть False.
Весь мир матрица, а мы в нем потоки байтов!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.09.2006 (Вт) 11:40

Viper, ты не прав: операция > левоассоциативная.

Код: Выделить всё
?1>2>3
False
?1>(2>3)
True
?(1>2)>3
False
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.09.2006 (Вт) 11:50

Упс.... :oops: обшибся... тогда у него в любом варианте выражения 6 > rm > 1 будет False, ибо что 0 < 1, что -1 <1
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 18

    TopList