Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Vba Excel公共函数返回“;“价值”;对于某些数字_Vba_Excel - Fatal编程技术网

Vba Excel公共函数返回“;“价值”;对于某些数字

Vba Excel公共函数返回“;“价值”;对于某些数字,vba,excel,Vba,Excel,我正在为我和我的爸爸、兄弟等制作一个简单的Excel表格,以记录汽车维修情况。我有一些编程背景,但不足以解决这个问题。问题是,当某些数字字符串被拉入函数,然后放入方程中时,它会给出一个#值!错误。请参见下面的示例: 单元格B9:更换@英里数:185555 D9单元:41446 单元格E9:=IF($G$2-$D9>=getMiles(B9),“服务!”,“确定”) G2单元:60000 如果我在E9中输入18555,我会得到“OK”而不是错误 如果我输入40000,就会得到错误 同样,如果我将等

我正在为我和我的爸爸、兄弟等制作一个简单的Excel表格,以记录汽车维修情况。我有一些编程背景,但不足以解决这个问题。问题是,当某些数字字符串被拉入函数,然后放入方程中时,它会给出一个#值!错误。请参见下面的示例:

单元格B9:更换@英里数:185555

D9单元:41446

单元格E9:=IF($G$2-$D9>=getMiles(B9),“服务!”,“确定”)

G2单元:60000

如果我在E9中输入18555,我会得到“OK”而不是错误

如果我输入40000,就会得到错误

同样,如果我将等式改为=getMiles(B9),就会发生这种情况。完全一样。显然,这不是数字的多少。但是,任何超过一定数量的东西似乎都会触发错误。我不知道这是一个十六进制的东西或错误,或我的代码。请帮忙。请参见下面的里程公式,并从我的链接下载excel表格。提前感谢你的努力

Public Function getMiles(cellie As String) As Double

Dim pos As Integer
Dim milesStr As String
Dim milesTrimmedStr As String
Dim milesInt As Integer
Dim number As Integer

pos = InStr(cellie, "miles:")
number = pos + 6
milesStr = Mid(cellie, number, 7)
milesTrimStr = Trim(milesStr)
milesInt = CDbl(Val(milesTrimStr))

getMiles = milesInt


End Function

链接到我的Excel文件:

将变量
milesInt
从类型
Integer
更改为类型
Double
。您正在溢出整数变量


在VBA中,
Integer
变量是16位的,其值分为正数和负数,因此可以存储的最大正数是2^15-1=32767。这就是函数无法处理40000的原因。由于函数返回一个double,因此将该变量声明为
double
是有意义的。其他
整数
变量可以声明为
(即使溢出不是危险)。对于现代机器来说,在VBA中使用16位整数变量真的没有多大意义。

非常适合。如您所见,我脑子里有一个小小的想法,它可能需要是双精度的,所以我更改了返回类型,但忘记了更改内部变量。我的想法很尴尬,很可怜。非常感谢您简洁、准确、及时的回复!愿编程之神怜悯我的灵魂。。。。