2013-09-30 17 views
2

我的一个表格有一个名为Cost的字段和一个名为Extra Cost的字段。为什么这个IIF函数给出了#Error?

Total Cost: (Val(nz([Cost],"")))/100 + (Val(nz([Extra Cost],"")))/100 

(我除以100,因为CostExtra Cost存储没有小数点)

现在是:要拿出Total Cost,我用下面的字段,这只是罚款加在一起他们如果Cost = 0,我想Total Cost也= 0。我想出了以下内容,但如果Cost = 0,它会导致#Error。它工作正常,如果Cost = 0和Extra Cost>Cost> 0:

Total Cost: IIf([Cost]>0,((Val(nz([Cost],"")))/100+(Val(nz([Extra Cost],""))))/100,0) 

基本上我在寻找:

If Cost = 0, Then Total Cost = 0 
Else 
If Cost > 0, Then Total Cost = Cost + Extra Cost 

什么是错的 '真' 部分?

这里的数据的几个例子:

Cost Extra Cost 
100  2.5 
250  1.5 
150  2.5 
null 2.75 
+1

您可以将成本和额外成本的数据类型更改为数字而不是文本类型吗? – HansUp

+1

我刚刚将你的'IIf()'表达式复制并粘贴到Access查询中,它似乎在那里工作正常。你是否使用该表达式作为Form/Report控件的控件源? –

+0

“成本”和“额外成本”均以文本形式存储。我无法改变类型。 (好吧,不需要额外的工作) –

回答

1

根据您的描述,我觉得你可以通过100添加的,而不是将他们每个人100添加他们之前的2个值之后分裂。这不应该影响逻辑,但应该给你一个更简单的IIf表达式...这将有望更容易诊断。

IIf 
    (
     Val(Nz([Cost], "0")) > 0, 
     (Val([Cost]) + Val(Nz([Extra Cost], "0")))/100, 
     0 
    ) 

在Access 2007中使用的样本数据,我得到这样的结果从下列查询设置:

Cost Extra Cost Total Cost 
100 2.5    1.025 
250 1.5    2.515 
150 2.5    1.525 
    2.75    0 

SELECT 
y.Cost, 
y.[Extra Cost], 
IIf 
    (
     Val(Nz([Cost], "0")) > 0, 
     (Val([Cost]) + Val(Nz([Extra Cost], "0")))/100, 
     0 
    ) AS [Total Cost] 
FROM YourTable AS y; 

如果问题是[Total Cost]需要一个文本值,可以使用CStr()来将IIf数值转换为字符串。

CStr(
    IIf 
     (
      Val(Nz([Cost], "0")) > 0, 
      (Val([Cost]) + Val(Nz([Extra Cost], "0")))/100, 
      0 
     ) 
    ) 
+0

我试过你的第一个例子,但它只显示'额外成本',即使'成本'大于0。但是,它并没有给出##错误。我正在尝试第二个例子... –

相关问题