iif(Iserror())函数仍然返回#error

Nig*_*gel 6 ms-access function ms-access-2010

我有以下函数在我的查询中创建一个列:

MTD:IIf(IsError(FormatNumber([62xx]![F40])),0,FormatNumber([62xx]![F40]))

这链接到Excel文件,人们将数字和文本放在同一列中(本例中为F40).我需要知道我正在看的东西是数字还是文字.如果它是文本我想要一个零,如果它是一个数字我想要数字.我知道当我在文本行上使用FormatNumber([C107_62xx]![F40])时出现错误.我会假设当我得到一个错误,然后我的iif公式将其转换为零,世界将会高兴.出于某种原因,即使使用我的iif语句,我仍然会收到#error.我究竟做错了什么?

我也试过使用IsNumeric函数,但我仍然得到#NUM!通过的错误.

Han*_*sUp 5

IsError不会做你认为它做的事情.从帮助主题中,它"返回一个布尔值,指示表达式是否为错误值." 不是表达式是否触发错误,而是表达式是否为错误值.

对不起,这个解释可能不够清楚,但我不知道怎么做得更好.所以我建议你IsNumeric()在这里考虑这个表达式.

IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0)
Run Code Online (Sandbox Code Playgroud)

以下是具有输出的查询中的相同表达式.

SELECT
    [62xx].F40,
    IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0) AS MTD
FROM [62xx];
Run Code Online (Sandbox Code Playgroud)
F40    MTD
-----  ----
foo    0
1      1.00
2.345  2.35
bar    0
Run Code Online (Sandbox Code Playgroud)