iif (Iserror ()) 函数仍然返回#error
Posted
技术标签:
【中文标题】iif (Iserror ()) 函数仍然返回#error【英文标题】:iif (Iserror ()) function still returning #error 【发布时间】:2014-03-26 18:49:25 【问题描述】:我有以下函数在我的查询中创建一个列:
MTD: IIf(IsError(FormatNumber([62xx]![F40])),0,FormatNumber([62xx]![F40]))
这链接到 Excel 文件,人们将数字和文本放在同一列中(本例中为 F40)。我需要知道我正在查看的内容是数字还是文本。如果是文本我想要一个零,如果它是一个数字我想要这个数字。我知道当我在文本行上使用 FormatNumber([C107_62xx]![F40]) 时出现错误。我会假设当我遇到错误时,我上面的 iif 公式会将其转换为零,全世界都会欢欣鼓舞。出于某种原因,即使使用 iif 语句,我仍然会收到 #error。我做错了什么?
我也尝试过使用 IsNumeric 函数,但仍然得到 #NUM!通过的错误。
【问题讨论】:
【参考方案1】:IsError
并没有按照你的想法去做。从帮助主题来看,它“返回一个布尔值,指示表达式是否为错误值。” 不是表达式触发错误,而是表达式 是一个错误值。
抱歉,这个解释可能不够清楚,但我不知道如何做得更好。所以我只是建议你考虑这个IsNumeric()
表达你想要什么。
IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0)
这是查询中的相同表达式,输出如下。
SELECT
[62xx].F40,
IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0) AS MTD
FROM [62xx];
F40 MTD
----- ----
foo 0
1 1.00
2.345 2.35
bar 0
【讨论】:
我不明白为什么 IsError 没有按照我的想法做,但我确实尝试了您的建议。出于某种原因,IsNumeric 不是很可靠。我不喜欢从人们做疯狂事情的电子表格中提取数据。不过这似乎可行:IIf(IsNumeric(FormatNumber([62xx]![F40])),FormatNumber([62xx]![F40]),0)
有时 Excel 和 Access 的性能不如我所愿。感谢@HansUp 的帮助。
是的,关于第一部分...IsError()
不能用于trap 错误,只能告诉您某事是否是错误值。例如,除以零会触发错误 #11,“除以零”。但是IsError(1/0)
不会说True;相反,它会触发错误 #11。 IsError(11)
说 False。实际错误值是不同类型的生物。 IsError(CVErr(11))
确实返回 True。
那么@HansUp 你如何让 Acces 告诉你是否有错误?
@JonathanElkins 我能提供的最好的方法是使用On Error GoTo ...
设置错误处理,然后检查Err.Number
和Err.Description
以上是关于iif (Iserror ()) 函数仍然返回#error的主要内容,如果未能解决你的问题,请参考以下文章