Как объявить необязательный аргумент функции с пустым значением массива по умолчанию в VBA?

Я пытаюсь построить процедуру ниже. Последний аргумент подпрограммы — необязательный массив, по умолчанию он должен состоять из двух пустых строк. Объявление ниже не работает, оно дает мне эту ошибку: Ошибка компиляции: требуется постоянное выражение

Public Sub CreateReport(rpt As Report, rptSelectFLDS As Variant, _
                        rptWhereConds As Dictionary, _
                        Optional rptTopSelect As Variant = Array("", ""))

person user2395238    schedule 22.10.2014    source источник


Ответы (1)


Как насчет того, чтобы просто проверить, является ли аргумент IsMissing()?

Public Sub CreateReport(rpt As Report, rptSelectFLDS As Variant, _
                        rptWhereConds As Dictionary, _
                        Optional rptTopSelect As Variant)

    If IsMissing(rptTopSelect) Then rptTopSelect = Array("", "")
person RubberDuck    schedule 22.10.2014
comment
да, это возможная работа. Но мне любопытно, нельзя ли установить значение по умолчанию для необязательного аргумента массива? Может быть, это выполнимо, но мой синтаксис плохой. - person user2395238; 23.10.2014
comment
Честно говоря, мне так же любопытно. Я просто не сижу перед своей машиной в данный момент. - person RubberDuck; 23.10.2014
comment
Я немного покопался, и ответ - нет. Вы не можете установить значение по умолчанию в строке подписи, потому что оно предполагает постоянное выражение. Все, что вы можете сделать, это проверить, отсутствует ли вариант. Я полагаю, вы могли бы имитировать перегрузку с помощью второй функции, но это кажется запутанным. - person RubberDuck; 23.10.2014
comment
Хорошо, добавьте это к своему ответу, и я отмечу его как правильный. - person user2395238; 23.10.2014