如果返回FALSE而应该返回TRUE

4

我尝试做这样的事情

sub test()
a=inputbox("value1:")
b=inputbox("value2:")
c=inputbox("value3:")

  if a<b and a>c then 

    msgbox(a)

    else
      msgbox(b)
      msgbox(c)
   end if

end sub 

当我输入a为5,b为10,c为2时,条件应该返回TRUE并显示带有a的消息框,但它返回FALSE并显示带有b和c的消息框。我认为解决方案很简单,但我想不出来。
非常感谢。

2
使用a=CLng(inputbox("value1:"))等语句,可以将字符串转换为长整型(如果您预期不是整数值,则可以使用CDbl())。 - DisplayName
3
变量的类型有哪些?你应该养成使用Dim声明变量的习惯。使用Option Explicit可以强制自己这样做。如果你已将它们声明为数值类型,那么这个问题就不存在了。 - John Coleman
3个回答

3
您的输入框返回的是看起来像数字的字符串,而"5"不小于"10"。请执行以下操作之一:
  • Dim a as long, b as long, c as long
  • 使用Application.InputBox并带有Type:=1参数。
  • 将字符串转换为实数,例如:a=clng(inputbox("value1:"))if int(a)<int(b) and int(a)>int(c) then

2
这是因为VBA将您的输入视为字符串。只需在变量中添加CInt()或CLng(),让Excel知道它们是数字即可。
Sub test()

a = CInt(InputBox("value1:"))
b = CInt(InputBox("value2:"))
c = CInt(InputBox("value3:"))

  If a < b And a > c Then
    MsgBox (a)

    Else
      MsgBox (b)
      MsgBox (c)
   End If
End Sub

1
另外两个答案都很好,但我最终会选择Jeeped的明确变量声明方法(Dim a as long, b as long, c as long)。虽然我永远不会建议不声明变量 - 你已经发现这样做的好处,为什么要采用良好的实践方法,但你也可以简单地将输入框乘以1。这是一种使用乘法强制字符串转换为数字值的技巧(这是工作表公式中使用双重否定--()转换值为数字的类似技巧)。
a = InputBox("value1:") * 1
b = InputBox("value2:") * 1
c = InputBox("value3:") * 1

If a < b And a > c Then

    MsgBox (a)

Else

    MsgBox (b)
    MsgBox (c)

End If

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接