Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 测试值是否为长或整数(无小数点)_Excel_Vba_Integer_Long Integer - Fatal编程技术网

Excel 测试值是否为长或整数(无小数点)

Excel 测试值是否为长或整数(无小数点),excel,vba,integer,long-integer,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,它不会显示MsgB

我需要测试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,但会将值舍入为2。

由于您已将
x
的类型指定为
整数
,因此已将文本框字符串转换为
整数。因此,
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没有实现短循环的
,因此需要使用嵌套的
If
或类似项。

由于已将
x
的类型指定为
整数
,因此已将文本框字符串转换为
整数
。因此,
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没有实现短循环的
,因此需要使用嵌套的
If
或类似方法。

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

下面是另一种方法(伪代码,请检查语法!)



在VBA中,不能
Dim var as Decimal
,但可以
Dim var as Variant
并使用
var=CDec(…)
在变量中存储十进制数据类型。即便如此,我发现小数后有14或15个零的小数加上一个数字(或从一个整数中减去的等效小数)会四舍五入为一个整数。我还没有找到区分小小数和整数的解决方案。

在VBA中不能
Dim var as Decimal
,但可以
Dim var as Variant
并使用
var=CDec(…)
在Variant中存储十进制数据类型。即便如此,我发现小数后有14或15个零的小数加上一个数字(或从一个整数中减去的等效小数)会四舍五入为一个整数。我还没有找到区分小小数和整数的解决方案。

我会检查
TextBox1.Value
是否为整数,因为在设置
x
时,该值是四舍五入的
x
将保持一个整数,而
TextBox1.Value
不必是一。哦,我没想到这一点。它现在工作得很好,谢谢。通常情况下,您可以将值赋给一个整数(隐式截断十进制数字),再赋给一个浮点数,然后与源代码进行比较。或者,将源编号与其舍入值进行比较。如果相同,则为整数,否则为小数。@Bathsheba刚刚发送了与我上面提到的相同的解决方案。@FDavidov:是的,这不是一个很糟糕的方法,尽管它在2的52次方之后会崩溃。顺便说一句,请考虑重新整理您的评论以获得答案:我将向上投票。我会检查
TextBox1.Value
是否为整数,因为在您设置
x
时,该值是四舍五入的
x
将保持一个整数,而
TextBox1.Value
不必是一。哦,我没想到这一点。它现在工作得很好,谢谢。通常情况下,您可以将值赋给一个整数(隐式截断十进制数字),再赋给一个浮点数,然后与源代码进行比较。或者,将源编号与其舍入值进行比较。如果相同,则为整数,否则为小数。@Bathsheba刚刚发送了与我上面提到的相同的解决方案。@FDavidov:是的,这不是一个很糟糕的方法,尽管它在2的52次方之后会崩溃。顺便说一句,请考虑重新整理您的评论,以得到一个答案:I'll upvote.VBA没有
Decimal
类型。如果你重构它,我肯定会升级投票。我想你需要找到升级投票两次的方法:(:-)。我还不太确定;请注意,这是VBA而不是VB。让我们将其设置为三次。。。(:-)+:-):哈。但请检查以下内容:。它似乎可以在Access VBA中使用,但不能在Excel VBA中使用。VBA没有
Decimal
类型。如果你重构它,我肯定会升级投票。我想你需要找到升级投票两次的方法:(:-)。我还不太确定;请注意,这是VBA而不是VB。让我们将其设置为三次。。。(:-)+:-):哈。但请检查以下内容:。在Access VBA中似乎可以,但在Excel VBA中不可能。