我有以下代码:
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语句。我不知道为什么。
答案 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
需要注意的事项:
Option Explicit
,是吗?并了解范围?)。答案 3 :(得分:0)
如果执行了Else
分支,则只能是Label7 > Label4
评估为false的情况。
在不知道价值是什么的情况下,我不能说为什么这对你来说是一个惊喜,但我确信VBA的if语句完美无缺。