VB - Hvordan kan jeg teste om valgfrie argumenter er levert eller ikke?

stemmer
49

Hvordan tester jeg om valgfrie argumenter er levert eller ikke? - i 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 
Publisert på 02/11/2009 klokken 11:38
kilden bruker
På andre språk...                            


8 svar

stemmer
4

Hvis IsMissing (arg) Så ...

Svarte 02/11/2009 kl. 11:41
kilden bruker

stemmer
64

Bruk IsMissing:

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

Men hvis jeg husker riktig, dette fungerer ikke når du holder en standard for argumentet, og i alle fall det gjør bruk av standard argument heller overflødig.

Svarte 02/11/2009 kl. 11:41
kilden bruker

stemmer
14

Du kan bruke IsMissing () -funksjonen. Men dette fungerer bare med Variant datatype.

Svarte 02/11/2009 kl. 11:43
kilden bruker

stemmer
4

Hvis du bruker en streng eller antall variable kan du sjekke verdien av variabelen. For eksempel:

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

Dette gjør det mulig å bruke ikke-variant variabler.

Svarte 19/05/2016 kl. 16:19
kilden bruker

stemmer
3

Du kan bruke noe sånt som:

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
Svarte 01/12/2016 kl. 21:44
kilden bruker

stemmer
2

Med en variant vil jeg bruke NZ funksjon:

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

Den kan brukes sammen med andre datatyper også, bare husk at Zero teller som verken Null eller Zero-lengde, så nz(0,"")fortsatt returnerer 0.

Svarte 18/06/2017 kl. 09:00
kilden bruker

stemmer
0

"IsMissing" ... skjønte det måtte være en måte. Takk alle!

SQL har en funksjon, In (), hvor du kan passere flere argumenter for å se om målet verdien er på listen. Jeg har alltid likt det som en løsning, så her er min ta på det, håper det hjelper:

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

Så, det er åpenbart hvorfor jeg trengte "IsMissing"; fungerer ikke uten det.

Svarte 16/08/2018 kl. 18:40
kilden bruker

stemmer
0

De fleste av disse henviser til varianten typen, eller prøve, hvis en verdi er blank.

Men noen ganger du ønsker å sjekke om et område, arbeidsbok, regneark, eller annen type objekt ikke er passert, uten å sjekke ting som sheetnames.

I så fall:

DesiredRange is Nothing

Returnerer en boolsk. For eksempel:

    If DestinationRange Is Nothing Then
        MsgBox "Need a destination range when importing data"
    Else
        'We're happy
    End If
Svarte 24/04/2019 kl. 22:31
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more