На этот вопрос есть более простой, но не обязательно лучший ответ. Себастьян сказал: «Если я сделаю это с массивом, как показано выше, и назначу массив, строка будет помечена красным => как ошибка (и она не будет компилироваться)».
Ваш код включает «Необязательный y_val2 () As Variant = ????». Вам не нужен "()", чтобы он мог принимать массив Variant в качестве параметра. Так что, если вы действительно хотите сделать это таким образом, вы можете, например, что-то вроде «Optional y_val2 = FALSE».
При первоначальной передаче аргумента, если вы хотите передать массив, просто убедитесь, что that является массивом Variant.
Я действительно думаю, что более элегантно не использовать здесь значение по умолчанию, поэтому я согласен с ответом GSerg в целом (и поддержал как этот, так и исходный вопрос).
Однако для GSerg и spinjector да, вы можете проверить необязательный параметр с помощью «If IsArray (YourOptionalVariantParameter) Then», но если вы используете вариант, «IsMissing (YourOptionalVariantParameter)" удобен и элегантен, может быть немного быстрее и может использоваться, когда ( и только когда) Variant передается в качестве аргумента, чтобы проверить, существует ли он.
Если вы выполняете IsArray (YourOptionalVariantParameter) и такой параметр не существует, то все, что мы делаем, это проверяем, является ли несуществующая переменная массивом. Если вы используете значение параметра по умолчанию, такое как FALSE (как в моем первом примере), тогда имеет смысл сначала проверить, является ли переменная массивом или нет.
Кстати, я не согласен с тем, что вам нужно объявлять все параметры как Варианты для согласованности. Варианты менее эффективны, чем другие типы, и поэтому, я думаю, их следует использовать только в случае необходимости.
person
sdanse
schedule
06.12.2019