2009-11-02 35 views

Trả lời

59

Sử dụng IsMissing:

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

Tuy nhiên, nếu tôi nhớ không lầm, đây không hoạt động khi đưa ra một mặc định cho đối số, và trong mọi trường hợp nó làm cho việc sử dụng đối số mặc định thay cho dự phòng.

+16

Ngoài ra tôi nghĩ IsMissing chỉ hoạt động nếu đối số được khai báo là một biến thể –

+3

@Jon: true, vì 'IsMissing' được thực hiện theo cờ trong cấu trúc' VARIANT' (IIRC, 'VT_EMPTY'). Tôi đã không đề cập đến điều này vì câu hỏi của OP đã sử dụng 'Biến thể'. –

4

Nếu IsMissing (arg) Sau đó ...

9

Bạn có thể sử dụng hàm IsMissing(). Nhưng cái này chỉ hoạt động với kiểu dữ liệu biến thể.

2

Nếu bạn đang sử dụng biến số chuỗi hoặc số, bạn có thể kiểm tra giá trị của biến. Ví dụ:

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 

Điều này cho phép bạn sử dụng biến không phải biến thể.

+0

Nó không thể phân biệt cách sử dụng hoàn toàn hợp lệ mặc dù: 'func (" ", 0)' sẽ gắn cờ không chính xác các tham số chưa đặt. Nói chung không có * cách nào để có sự phân biệt này mà không sử dụng 'Biến thể'. –

+0

@KonradRudolph Đó là một điểm rất tốt. Bạn muốn chắc chắn rằng bạn không bao giờ sử dụng nó trong một tình huống là bạn có thể gửi một chuỗi rỗng hoặc một số không. – OSUZorba

2

Bạn có thể sử dụng một cái gì đó như:

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

Với một biến thể tôi sẽ sử dụng NZ chức năng:

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

Nó có thể được sử dụng với các loại dữ liệu khác cũng vậy, chỉ cần ghi nhớ rằng Zero được tính là không phải là Null hay Zero-Length, vì vậy nz(0,"") vẫn trả về 0.

Các vấn đề liên quan