简单的excel VBA if if if else bug?

时间:2014-11-12 23:41:34

标签: excel vba excel-vba

我对此VBA Excel代码有疑问: =如果A3不存在,区域(A2,A3)不会返回任何值。

Function Area(Length, Optional Width)

    If IsMissing(Width) Then
        Area = Length * Length
    Else
        Area = Length * Width
    End If

End Function

2 个答案:

答案 0 :(得分:3)

你在混淆IsMissing和IsEmpty。

如果没有任何内容传递给函数,例如:= Area(A1),则Width将缺失。

但是你要在函数中传递一个参数,其中B1不包含任何内容:= Area(A1,B1),那么Width将为Empty,而不是Missing。

处理这两种情况:

If IsMissing(Width) Or IsEmpty(Width) Then
    Area = Length * Length
Else
    Area = Length * Width
End If

答案 1 :(得分:0)

IsMissing不适用于简单的数据类型(例如Integer或Double),因为与Variants不同,它们没有为"缺失"提供服务。标志位。因此,类型化可选参数的语法允许您指定默认值。如果在调用过程时省略了参数,则参数将具有此默认值,如下例所示:

也许这会有所帮助:

Function Area(Length, Optional Width as String = "missing")
    If Width = "missing" Then
        Area = Length * Length
    Else
        Area = Length * Width
    End If

End Function

自: http://office.microsoft.com/en-in/access-help/ismissing-function-HA001228866.aspx