测试值是Long还是Integer(无小数位)

时间:2016-09-06 06:58:37

标签: excel vba integer long-integer

我需要测试textbox1和textbox2中的值是整数还是长(没有小数位)。

我试过这样的事情:

    Dim x As Integer
    Dim y As Integer

    x = TextBox1.Value
    y = TextBox2.Value

    If x = Int(x) Then
        'my code
    Else
        MsgBox("value is not an integer")

如果我把x = 2.3,它不显示MsgBox,但它将值四舍五入为。

3 个答案:

答案 0 :(得分:3)

由于您已将x类型指定为Integer,因此已经从文本框字符串到Integer的转换已经发生。因此Int(x)是无操作。

一种解决方法是使用

之类的东西
If IsNumber(TextBox1.Value) Then
    If Fix(TextBox1.Value) = TextBox1.Value Then
        'I am an integeral type.
    End If
End If

这里,Fix截断数字类型,我依靠VBA进行正确的比较。请注意,VBA未实现短圈 And,因此您需要使用嵌套的If或类似的。

答案 1 :(得分:1)

您无法在VBA中Dim var as Decimal,但可以Dim var as Variant并使用var = CDec(...)在变量中存储小数数据类型。即使这样,我也发现在小数点后加一个数字(或从整数中减去等效的小数)的小数点后有14或15个零的四舍五入为整数。我还没有找到一种可将微小的小数与整数区分开的解决方案。

答案 2 :(得分:0)

这是另一种方法(伪代码,所以检查语法!)

Dim l_Temp_D1 as Decimal
Dim l_Temp_D2 as Decimal
Dim l_Temp_I  as Integer

l_Temp_I  = TextBox1.Value
l_Temp_D1 = TextBox1.Value
l_Temp_D2 = l_Temp_I

if (not IsNumber(TextBox1.Value)) then
    ' Error!!!
End If

if (l_Temp_D1 = l_Temp_D2) then
  ' Integer
  ...
else
  ' Float
  ...
End If