2016-04-08 7 views
1

У меня есть VBA Sub подпись которого выглядит примерно так:Как проверить, если необязательный строковый параметр был указан в VBA

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

xyz можно назвать как так

call xyz("apple") 

или

call xyz("banana", "") 

или

call xyz("strawberry", "blue") 

Я хочу, чтобы функция могла определить, имеет ли вызывающий объект явно значение для param_2 (что имеет место во втором и третьем вызовах).

Я пробовал param_1 is null, param_1 is empty и isNull(param_1), но ничего не работало так, как я ожидал.

Итак, каков канонический способ проверить, указано ли значение параметра?

ответ

1

Последней возможностью было бы указать абсурдное значение по умолчанию. Затем сравните с дефолтом.

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

Не 100% на это, но .. Для строки сделать

If param_2 = "" Then ... 

В противном случае для объектов использования

If param_2 is Nothing Then 

Числа

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

Дубликат: VB - How do I test if optional arguments are supplied or not?

Ответ Jon дает (IsMissing() for Variants) - это то, что я использую при использовании необязательного аргумента, который не требует значения по умолчанию.

Чаще всего, я считаю, что предпочитаю использовать необязательные аргументы для чего-то полезного.

 Смежные вопросы

  • Нет связанных вопросов^_^