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.NumberErr.Description

以上是关于iif (Iserror ()) 函数仍然返回#error的主要内容,如果未能解决你的问题,请参考以下文章

Access使用记录

ES6类文字中的IIFE

楼梯T-SQL:超越基础6级:使用CASE表达式和IIF函数

通过取父级for循环的i来理解闭包,iife,匿名函数

不应该调用 RxJS iif 参数

VBA常用函数