View Single Post
  #6   Report Post  
Posted to microsoft.public.excel.programming
Peter T Peter T is offline
external usenet poster
 
Posts: 5,600
Default Is there a test for an empty string that returns a boolean?

I guess it depends on the OP's overall objective "I want to test to see if
the parameter has been included" and whether "included" means passed or
empty. The way I see it Len(arg) merely tests if the argument contains any
characters, or indeed is an empty string. It doesn't prove either way if the
optional argument was passed or 'is missing'.

Sub test()
Dim a As String, b As String
Call foo(a, b)
MsgBox a & vbCr & b, , "neither arg was missing"

End Sub

Function foo(Optional arg1 As String, Optional arg2 As String = "dummy")

If Len(s1) = 0 Then
arg1 = "arg1 was missing"
Else
arg1 = "return string 1"
End If

If s2 = "dummy" Then
arg2 = "arg2 was missing"
Else
arg2 = "return string 2"
End If

End Function

Regards,
Peter T

"Rick Rothstein (MVP - VB)" wrote in
message ...
CboElevation.Enabled = IsEmpty(ElevCptn)


IsEmpty() isn't for strings, it's for Variants that haven't been

assigned
a value. IsMissing(), as Peter suggested, is only for Variants. Optional
parameters typed as anything besides a Variant that aren't given a

default
value in the procedure declaration get the default for the data type, so
numbers get 0 and strings get empty strings. Therefore you should simply
be able to test ElevCptn against "". Did you ever try that?

Ron's Len() suggestion is also valid.


And to follow up on Jeff's comment, while this may look "simpler"...

CboElevation.Enabled = (ElevCptn = "")

due to the way VB stores Strings, this is marginally faster...

CboElevation.Enabled = (Len(ElevCptn) = 0)

It wouldn't matter in a single or few usage situation; but, inside a very
large loop, it could make a difference.

Rick