我面临一个奇怪的问题,真的不确定原因:(
所以看看下面的内容(所有细胞形成为2 d.p的百分比):
Sheet http://im61.gulfup.com/xXpJZu.png
现在这里是Code1:
If Worksheets("Sheet1").Range("A2").Value < Worksheets("Sheet1").Range("B2").Value Then
MsgBox "Yes"
Else
MsgBox "Nope"
End If
结果:正常工作并显示&#34; Nope&#34;自从&#34; Text&#34;不能少于一个数字/百分比。
代码2:
If Worksheets("Sheet1").Range("A2").Value > Worksheets("Sheet1").Range("B2").Value Then
MsgBox "Yes"
Else
MsgBox "Nope"
End If
结果:无法正常工作并显示&#34;是&#34;。这就是问题所在。我不明白为什么它会考虑“#34; Text&#34;大于&#34; 10%&#34;或&#34; 0.1&#34;。
我想了一下,问题可能在于格式化单元格,所以我将其更改为General&amp;然后到文本,但我仍然得到相同的结果。
另外,最令我惊讶的是,当我投入&#34;&lt;&#34;签名它正常工作,但使用&#34;&gt;&#34;时给出错误的结果登录。
我错过了什么?
答案 0 :(得分:7)
首先请务必注意Range(...).Value
的类型为Variant
,您可以使用观察窗口进行确认。
然后在Relational Operators的msdn VBA语言参考页面的底部找到答案:
•上述两个规则都有例外情况 操作数具有声明类型的Variant,最初具有一个操作数 值类型为String,另一个操作数最初具有 数值类型。在这种情况下,将考虑数字操作数 小于(而不等于)String操作数,不管是什么 他们的价值观。
答案 1 :(得分:1)
当比较字符串和数字时,比较合并到文本比较,为了得到你想要的结果,你必须包含一个像这样的ISNUMBER()测试,其中formuls显示在第1行: