Как создать IsMissingOrEmptyString в VBA, чтобы справиться с необязательным аргументом? - PullRequest
2 голосов
/ 07 июня 2011

Если необязательный аргумент является вариантом IsMissing ниже, работает, если это строка, IsMissing нет.Как создать IsMissingOrEmptyString, чтобы справиться с обоими?

Public Sub test(Optional varArg As Variant)

    m_Flag = false
    If IsMissing(varArg) Then
        m_Flag = true
    End If

 End Sub   


Public Sub test(Optional varArg As String)

    m_Flag = false
    If varArg = "" Then
        m_Flag = true
    End If

 End Sub*   

Ответы [ 2 ]

6 голосов
/ 07 июня 2011

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

В случае строковой переменной значением по умолчанию является vbNullString, и самый быстрый способ проверить это - использовать функцию lenB ...

Public Sub test(Optional varArg as String)
  m_Flag = (LenB(varArg) = 0)
End Sub

Выше будет установлено значение m_Flag, если varArg = "".

Обратите внимание, что объявление varArg в качестве строковой переменной означает, что невозможно провести различие между случаем, когда в процедуру передается пустая строка, и случаем, когда аргумент опускается в вызове процедуры.

3 голосов
/ 07 июня 2011

Если вы измените тело своих функций на это, результат будет одинаковым независимо от того, объявлен ли отсутствующий необязательный параметр как Variant или String.

m_Flag = false
If Len(varArg & vbNullString) = 0 Then
    m_Flag = true
End If

Итак, тогда ...

Public Sub test(Optional varArg As Variant)

... конкатенация пустой строки со значением Null создает пустую строку.(Len = 0)

And ...

Public Sub test(Optional varArg As String)

... конкатенация 2 пустых строк приводит к пустой строке.(по-прежнему Лен = 0)

Таким образом, результат будет одинаковым в любом случае.

Однако, в зависимости от ваших потребностей, этого может быть недостаточно.Обратите внимание, например, что при использовании varArg в качестве String невозможно определить, не указал ли пользователь значение для параметра или фактически передал пустую строку в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...