如果Then语句不正常

时间:2011-04-05 19:43:58

标签: excel user-interface vba

我有以下代码:

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 个答案:

答案 0 :(得分:4)

Format返回一个字符串,但您可能希望执行数字比较,而不是字符串比较。

答案 1 :(得分:3)

字符串中的货币将被比较为字符串,这意味着$ 9将排序(不比较)最后与$ 10相比,因为字符9在字符1之后排序。将其转换为double。当你取一个字符串a和b并对>进行测试时b,你真的在​​排序,找出最先出现的东西。

您应该通过声明变量来确保变量是数字:

DIM label8 as double, label7 as double

在操纵它们之前。

答案 2 :(得分:2)

发布的代码正在进行字符串比较(参见Knox的答案)。要将这些值转换为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. 我使用了您的变量名称,这些名称是货币值的非常糟糕的名称。
  3. 您实际上会以这种方式获得数字比较,而不是String。格式将让您到达那里,因为始终会返回一个字符串(请参阅我对jdigital答案的评论)。

答案 3 :(得分:0)

如果执行了Else分支,则只能是Label7 > Label4评估为false的情况。

在不知道价值是什么的情况下,我不能说为什么这对你来说是一个惊喜,但我确信VBA的if语句完美无缺。