Если вы измените тело своих функций на это, результат будет одинаковым независимо от того, объявлен ли отсутствующий необязательный параметр как 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 невозможно определить, не указал ли пользователь значение для параметра или фактически передал пустую строку в качестве параметра.