Если То заявление не работает правильно - PullRequest
1 голос
/ 05 апреля 2011

У меня есть следующий код:

Private Sub CommandButton1_Click()
Label7 = Format(Sheets("DATA").Range("R8").Value, "Currency")
Label4 = Format(Sheets("DATA").Range("AO2").Value, "Currency")

If Label7 > Label4 Then
Sheets("DATA").Range("R8").Value = Sheets("DATA").Range("R8").Value - Sheets("DATA").Range("AO2").Value
'Label7 = Format(Sheets("DATA").Range("R8").Value, "Currency")
AdjustLevel
Unload act_Upgrade
Unload Upgrade_Lot

Load Upgrade_Lot
Upgrade_Lot.Show

Else
MsgBox "Sorry You Don't Have Enough Money", vbOKOnly
Unload act_Upgrade
End If
End Sub

Когда он запускается, мой Label7 больше, чем Label4, и все же он выполняет оператор Else. Я не знаю почему.

Ответы [ 4 ]

4 голосов
/ 05 апреля 2011

Формат возвращает строку, но вы, вероятно, хотите выполнить числовое сравнение, а не сравнение строк.

3 голосов
/ 06 апреля 2011

Валюта внутри строки будет сравниваться как строка, что означает, что $ 9 будет сортировать (не сравнивать) в последнюю очередь по сравнению с $ 10, потому что символ 9 сортируется после символа 1. Преобразуйте его в двойное число.Когда вы берете строку a и b и делаете тест для a> b, вы действительно сортируете, чтобы выяснить, что на первом месте.

Вы должны убедиться, что ваши переменные являются числами, объявив их:

DIM label8 as double, label7 as double

, прежде чем манипулировать ими.

2 голосов
/ 06 апреля 2011

Отправленный код выполняет сравнения строк (см. Ответ Нокса).Чтобы превратить эти значения в переменные типа Currency, вам потребуется:

Private sub Foo()

Dim Label7 As Currency
Dim Label4 As Currency

    Label7 = CCur(Sheets("DATA").Range("R8").Value)
    Label4 = CCur(Sheets("DATA").Range("AO2").Value)

    If Label7 > Label4 Then
         'do something
    Else
         'do something different
    End If

End Sub

Замечания:

  1. Я объявил мои переменные (вы с использованием Option Explicit, да? И понимаете сферу?).
  2. Я использовал ваши имена переменных, которые очень плохие имена для значений валюты.* Таким образом, вы получите числовое сравнение, а не строку.Формат не доставит вас туда, поскольку всегда возвращает строку (см. Мой комментарий к ответу jdigital).
0 голосов
/ 05 апреля 2011

Если ветвь Else выполнена, то только в том случае, если Label7 > Label4 оценивается как ложное.

Не зная, что это за значения, я не могу сказать, почему это вас удивляет, но я уверен, что оператор VBA if отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...