Excel 如何在[vba]自定义函数中添加if子句

Excel 如何在[vba]自定义函数中添加if子句,excel,vba,Excel,Vba,我写了这个函数 Function potential(Volume, Original, Better) potential = (Original - Better) * Volume End Function 这是非常基本的,但我真正需要的是,当Better为空时,答案应该是0 我试过了 potential=Application.WorksheetFunction.If(更佳=0,0,(原始-更佳)*卷) 结果总是错误的 或potential=((原始-更好)*卷)*(更好/更好)仅在B

我写了这个函数

Function potential(Volume, Original, Better)
potential = (Original - Better) * Volume
End Function
这是非常基本的,但我真正需要的是,当Better为空时,答案应该是0

我试过了
potential=Application.WorksheetFunction.If(更佳=0,0,(原始-更佳)*卷)
结果总是错误的

potential=((原始-更好)*卷)*(更好/更好)
仅在Better为空时给出错误

所以我尝试了
potential=Application.WorksheetFunction.IfError(((原始-更好)*卷)*(更好/更好),0)
,结果相同

我做错了什么?

使用:

Function potential(ByVal Volume As Double, ByVal Original As Double, Optional ByVal Better As Double = 0) As Double
    If Better = 0 Then Exit Function
    potential = (Original - Better) * Volume
End Function
使用:


@Scott Craner-如果没有像本例中那样指定,VB/VBA是否默认为“ByVal”?@VBA中的Gleng参数总是
ByRef
,除非另有指定(是的,您希望
ByVal
99.999%的时间)@Scott Craner-VB/VBA是否默认为“ByVal”当未按本例中的方式指定时?@Gleng参数在VBA中始终为
ByRef
,除非另有规定(是的,您希望
ByVal
99.999%的时间),否则不要将工作表函数用于流控制。为此,请使用VBA语言构造(例如,
If…Then…Else…End If
),不要将工作表函数用于流控制。为此,请使用VBA语言构造(例如,
If…Then…Else…End If
)。