2016-04-08 3 views
1

angegeben wurde habe ich eine VBA Sub dessen Unterschrift Sieht aus wie so:Wie kann ich überprüfen, ob ein optionaler String-Parameter in VBA

private sub xyz (     _ 
     optional param_1 as string, _ 
     optional param_2 as string _ 
) 

xyz könnte wie so

call xyz("apple") 

oder

genannt werden
call xyz("banana", "") 

oder

call xyz("strawberry", "blue") 

Ich möchte, dass die Funktion feststellen kann, ob der Anrufer explizit einen Wert für param_2 angegeben hat (was im 2. und 3. Anruf der Fall ist).

Ich habe versucht param_1 is null, param_1 is empty und isNull(param_1), aber nichts hat so funktioniert, wie ich es erwartet hätte.

Also, was ist die kanonische Art zu prüfen, ob ein Parameter Wert angegeben wurde?

Antwort

1

Die letzte Möglichkeit wäre, einen absurden Standard anzugeben. Dann vergleichen Sie mit dem Standard.

Private Sub xyz(_ 
      Optional param_1 As String = "mydefault_impossible_value", _ 
      Optional param_2 As String = "mydefault_impossible_value") 
    If param_1 = "mydefault_impossible_value" Then 
     MsgBox "novalue_for_param_1" 
    End If 
    If param_2 = "mydefault_impossible_value" Then 
     MsgBox "novalue_for_param_2" 
    End If 
End Sub 
0

nicht zu 100% auf das, aber .. Bei String tun

If param_2 = "" Then ... 

sonst für Objekte verwenden

If param_2 is Nothing Then 

Zahlen

If param_2 = 0 Then ... 
0
Public Function OptionalParam(Optional p As String) 
    Debug.Print p = "" 
End Function 
Verwandte Themen