gpt4 book ai didi

vba - Excel 公共(public)函数对某些数字返回 "VALUE#"

转载 作者:行者123 更新时间:2023-12-04 20:40:25 29 4
gpt4 key购买 nike

我正在为我和我的父亲、兄弟等制作一个简单的 Excel 表格来跟踪汽车维护。我有一些编程背景,但不足以弄清楚这个问题。问题是当某些数字字符串被拉入函数然后放入等式时,它会给出一个#VALUE!错误。请参阅下面的示例:

单元格 B9:替换 @ 英里:185555

D9 单元格:41446

单元格 E9:=IF($G$2-$D9>=getMiles(B9),"SERVICE!","OK")

单元格 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 文件: https://filedropper.com/filemanager/public.php?service=files&t=1c6edf91310c639743bfcd09b0fbb80c

最佳答案

更改变量milesInt从类型 Integer输入 Double .您正在溢出整数变量。

在 VBA 中,Integer变量是 16 位的,值分为正负,所以可以存储的最大正数是 2^15-1 = 32767。这就是为什么你的函数不能处理 40,000。由于您的函数返回一个 double 值,因此将该变量声明为 Double 是有意义的。 .其他Integer变量可以声明为Long (即使溢出不是危险)。对于现代机器,在 VBA 中使用 16 位整数变量确实没有多大意义。

关于vba - Excel 公共(public)函数对某些数字返回 "VALUE#",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34889311/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com