선택적 인수가 제공되었는지 여부를 어떻게 테스트합니까?
선택적 인수가 제공되었는지 여부를 어떻게 테스트합니까? -VB6 / VBA에서
Function func (Optional ByRef arg As Variant = Nothing)
If arg Is Nothing Then <----- run-time error 424 "object required"
MsgBox "NOT SENT"
End If
End Function
사용 IsMissing
:
If IsMissing(arg) Then
MsgBox "Parameter arg not passed"
End If
그러나 올바르게 기억하면 인수에 기본값을 지정할 때 작동하지 않으며 어떤 경우에도 기본 인수를 사용하는 것이 다소 중복됩니다.
IsMissing () 함수를 사용할 수 있습니다. 그러나 이것은 Variant 데이터 유형에서만 작동합니다.
Sub func(Optional s As Variant)
If IsMissing(s) Then
' ...
End If
End Sub
문자열 또는 숫자 변수를 사용하는 경우 변수 값을 확인할 수 있습니다. 예를 들면 :
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
이를 통해 비 변형 변수를 사용할 수 있습니다.
IsMissing (arg) 그렇다면 ...
다음과 같이 사용할 수 있습니다.
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
변형에서는 NZ 함수를 사용합니다 .
Function func (Optional ByRef arg As Variant = Nothing)
If nz ( arg, 0 ) = 0 Then
MsgBox "NOT SENT"
End If
End Function
다른 데이터 유형에도 사용할 수 있습니다. 0은 Null도 0 길이도 아닌 것으로 간주되므로 nz(0,"")
여전히 0을 반환합니다.
"IsMissing"...Figured there would have to be a way. Thanks all!
SQL has a function, In(), where you can pass multiple arguments to see if the target value is in the list. I've always liked that as a solution, so here's my take on that, hope it helps:
Public Function IsIn(ByVal TestVal, ByVal VersusVal1, _
Optional ByVal VersusVal2, Optional ByVal VersusVal3, _
Optional ByVal VersusVal4, Optional ByVal VersusVal5, _
Optional ByVal VersusVal6, Optional ByVal VersusVal7, _
Optional ByVal VersusVal8, Optional ByVal VersusVal9, _
Optional ByVal VersusVal10, Optional ByVal VersusVal11, _
Optional ByVal VersusVal12, Optional ByVal VersusVal13, _
Optional ByVal VersusVal14, Optional ByVal VersusVal15, _
Optional ByVal VersusVal16, Optional ByVal VersusVal17, _
Optional ByVal VersusVal18, Optional ByVal VersusVal19, _
Optional ByVal VersusVal20) As Boolean
Dim CheckVals(1 To 20) as Variant
VersusVals(1) = VersusVal1
VersusVals(2) = VersusVal2
VersusVals(3) = VersusVal3
VersusVals(4) = VersusVal4
VersusVals(5) = VersusVal5
VersusVals(6) = VersusVal6
VersusVals(7) = VersusVal7
VersusVals(8) = VersusVal8
VersusVals(9) = VersusVal9
VersusVals(10) = VersusVal10
VersusVals(11) = VersusVal11
VersusVals(12) = VersusVal12
VersusVals(13) = VersusVal13
VersusVals(14) = VersusVal14
VersusVals(15) = VersusVal15
VersusVals(16) = VersusVal16
VersusVals(17) = VersusVal17
VersusVals(18) = VersusVal18
VersusVals(19) = VersusVal19
VersusVals(20) = VersusVal20
On Error Goto 0
IsIn = False
For x = 1 To 20
If Not IsMissing(VersusVals(x)) Then
If TestVal = VersusVals(x) Then
IsIn = True
Exit For
End If
End If
Next x
End Function
So, that's obviously why I needed "IsMissing"; doesn't work without it.
Most of these refer to the variant type, or test if a value is blank.
However, sometimes you want to check if a range, workbook, worksheet, or other type of object is not passed, without checking things like sheetnames.
In that case:
DesiredRange is Nothing
Returns a boolean. For example:
If DestinationRange Is Nothing Then
MsgBox "Need a destination range when importing data"
Else
'We're happy
End If
참고URL : https://stackoverflow.com/questions/1660772/how-do-i-test-if-optional-arguments-are-supplied-or-not
'developer tip' 카테고리의 다른 글
PostgreSQL 임시 테이블 (0) | 2020.11.11 |
---|---|
Git 상태를 완료하는 데 오랜 시간이 걸립니다. (0) | 2020.11.11 |
개발을 동기화 상태로 유지하기 위해 git-bundle을 사용하는 방법은 무엇입니까? (0) | 2020.11.11 |
Dalvik 및 Android 툴체인에서 어떤 최적화를 기대할 수 있습니까? (0) | 2020.11.11 |
AngularJS 템플릿으로 HTML을 렌더링하는 방법 (0) | 2020.11.10 |