IF 在应该返回 TRUE 时返回 FALSE
Posted
技术标签:
【中文标题】IF 在应该返回 TRUE 时返回 FALSE【英文标题】:IF returns FALSE when it sould return TRUE 【发布时间】:2019-03-29 09:55:04 【问题描述】:我试图做这样的事情
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 的消息框。我认为解决方案非常简单,但我无法弄清楚。
非常感谢
【问题讨论】:
使用 a=CLng(inputbox("value1:")) 等将字符串转换为长整数(如果您希望不是整数值,则使用 CDbl()) 变量有哪些类型?您应该养成使用Dim
声明它们的习惯。使用Option Explicit
强迫自己这样做。如果您已将它们声明为数字类型,那么这将不是问题。
【参考方案1】:
您的 InputBox 正在返回看起来像数字的字符串,并且 "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() 即可知道它们是数字的。
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
【讨论】:
【参考方案3】:其他两个答案非常好,我会最终使用 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
【讨论】:
以上是关于IF 在应该返回 TRUE 时返回 FALSE的主要内容,如果未能解决你的问题,请参考以下文章