Просто чтобы прояснить ответ Джона Руди.
Синтаксис необязательный (маленький 'o'), то есть вам не нужно его использовать. По моему опыту, большинство VB6-кодеров не используют синтаксис и вместо этого предпочитают обычные «неназванные» параметры.
Если вы решите использовать его, все последующие параметры в вызове подпрограммы должны быть названы.
Синтаксис именованного параметра может использоваться для всех параметров, независимо от того, был ли соответствующий аргумент объявлен с использованием ключевого слова VBA Optional
(заглавная 'O'). Рассмотрим, например, эту (слегка ненормальную) функцию VBA с двумя параметрами: одним обязательным и одним Optional
:
Private Function TimesTen( _
ByVal Value As Long, _
Optional ByVal Factor As Long = 10 _
) As Long
TimesTen = Value * Factor
End Function
В VBA я могу вызвать его, используя именованные параметры для обязательного параметра (параметр Optional
может быть просто пропущен в VBA, в отличие от C # .NET, для которого Type.Missing
должен использоваться для всех пропущенных параметров Optional
):
MsgBox TimesTen(Value:=9)
Если бы я хотел вызвать его с параметрами в «неправильном» порядке (почему ??), я мог бы добиться этого, используя именованные параметры:
MsgBox TimesTen(Factor:=11, Value:=9)
Попытка использовать обычный вызов «безымянного» параметра после именованного вызывает ошибку компиляции:
MsgBox TimesTen(Value:=9, 11)
Так почему же VBA-кодеры используют именованные параметры, если VB6-кодеры редко делают это, даже если они используют в основном один и тот же язык? Я думаю, это потому, что VBA, сгенерированный устройством записи макросов приложений MS Office, имеет тенденцию (всегда?) Генерировать именованные параметры, и многие VBA-кодеры учатся программировать таким образом.