2009-11-02 18 views

Odpowiedz

59

Zastosowanie IsMissing:

If IsMissing(arg) Then 
    MsgBox "Parameter arg not passed" 
End If 

Jednakże, jeśli dobrze pamiętam, to nie działa, gdy dając domyślnie dla argumentu, a w każdym razie czyni użycie domyślnego argumentu raczej zbędnym.

+16

Myślę też, że IsMissing działa tylko wtedy, gdy argument jest zadeklarowany jako wariant –

+3

@Jon: true, ponieważ 'IsMissing' jest zaimplementowany pod względem flagi w strukturze' VARIANT' (IIRC, 'VT_EMPTY'). Nie wspomniałem o tym, ponieważ pytanie PO już i tak stosowało "wariant". –

4

Jeśli IsMissing (arg) Następnie ...

9

Można użyć funkcji IsMissing(). Ale ten działa tylko z typem Wariant.

2

Jeśli używasz zmiennej łańcuchowej lub liczbowej, możesz sprawdzić wartość zmiennej. Na przykład:

Function func (Optional Str as String, Optional Num as Integer) 

If Str = "" Then 
    MsgBox "NOT SENT" 
End If 

If Num = 0 Then 
    MsgBox "NOT SENT" 
End If 

End Function 

Umożliwia to użycie zmiennych niezmiennych.

+0

Nie można jednak rozróżnić idealnie poprawnego użycia, chociaż: 'func (" ", 0)' niepoprawnie zgłosi niezdefiniowane parametry. Ogólnie rzecz biorąc, nie ma * możliwości * posiadania tego rozróżnienia bez użycia "wariantu". –

+0

@KonradRudolph To bardzo dobry punkt. Chcesz się upewnić, że nigdy nie użyłeś go w sytuacji, gdybyś mógł wysłać pusty ciąg lub liczbę zero. – OSUZorba

2

Można użyć coś takiego:

function func(optional vNum as integer:=&HFFFF) '&HFFFF value that is NEVER set on vNum 

If vNum = &HFFFF Then 
    MsgBox "NOT SENT" 
End If 

End Function 
1

wariantem byłoby używam NZ funkcję:

Function func (Optional ByRef arg As Variant = Nothing) 
    If nz (arg, 0) = 0 Then 
     MsgBox "NOT SENT" 
    End If 
End Function 

Może być stosowany z innymi typami danych też, po prostu pamiętać, że Zero nie liczy się jako Null ani Zero-Length, więc nadal zwraca 0.

Powiązane problemy