Vba argument not optional что это
Vba argument not optional что это
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
Answered by:
Question
I have written a program, using VBA in Excel 2007, and it runs perfect. I have been reading that it is good practice to ‘compile’ your program, not something I have previously done. When I click compile, I get the following error: «Complie Error: Argument not optional». What does this mean?
The error occurs on this line of code: Call InsertVaRSummaryFigure
Which calls this function (which works fine):
Function InsertVaRSummaryFigure(SummarySheet As String)
Worksheets(SummarySheet).Select
strFindAddressClearSection = Range(«C1:C1000»).Find(«Total Core Rates GB», Range(«C1»), xlValues, xlWhole, xlByColumns, xlNext).Address
Range(strFindAddressClearSection).Offset(0, 2).Formula = «=-VaRData!D11»
Необязательные параметры (Visual Basic)
Некоторые аргументы процедуры можно задать как необязательные, тем самым указывая, что их можно не задавать при вызове процедуры. Необязательные параметры указываются с помощью Optional ключевого слова в определении процедуры. Применяются следующие правила.
Для каждого необязательного параметра в определении процедуры должно быть указано значение по умолчанию.
Значение по умолчанию для необязательного параметра следует задавать в виде константного выражения.
Каждый параметр, идущий в определении процедуры после необязательного, также должен быть необязательным.
Ниже приведен синтаксис объявления процедуры с необязательным параметром:
Вызов процедур с необязательными параметрами
При вызове процедуры с необязательным параметром можно опускать этот аргумент. Если он не задан, процедура будет использовать значение по умолчанию, объявленное для параметра.
Можно опустить сразу несколько необязательных аргументов в списке аргументов, ставя несколько запятых подряд для обозначения их позиций. Ниже приводится пример вызова процедуры, при котором задаются первый и четвертый аргументы, а второй и третий пропускаются.
Определение наличия необязательного аргумента
Процедура во время выполнения не может отличить пропущенный аргумент от аргумента, для которого в вызывающем коде явным образом задано значение по умолчанию. Если такое различение существенно, можно задать в качестве значения по умолчанию значение, которое вряд ли будет использоваться. Следующая процедура определяет необязательный параметр office и проверяет его значение по умолчанию, QJZ чтобы определить, пропущен ли он в вызове:
Необязательные параметры и перегрузка
Другой способ определения процедуры с необязательными параметрами состоит в использовании перегрузки. Если имеется один необязательный параметр, то можно определить две перегруженные версии процедуры, одна принимает параметр, а другая — нет. Такой подход становится более сложным с увеличением числа необязательных параметров. Однако, его преимущество заключается в том, что он позволяет точно знать, все ли необязательные аргументы заданы в вызывающей программе.
argument not optional vba ошибка
Я пытаюсь понять это и не могу.
Я все время получаю сообщение об ошибке: «Ошибка компиляции — аргумент не является обязательным». Я поставляю аргументы, и они установлены как Необязательно!
Попытка передать строку и массив функции и подсчитать вхождения строк массива в переданной строке.
Код перестает работать в строке:
с сообщением «Ошибка компиляции: аргумент не факультативно», выделив Val в строке:
Val — это функция VBA, для которой требуется одиночный, обязательный, аргумент. Поэтому компилятор генерирует сообщение «Аргумент не факультативный», если вы не предоставляете этот аргумент. (Документация MSDN Val )
Плохая идея использовать имена функций VBA в качестве имен переменных, поэтому я бы рекомендовал, чтобы вы не использовали Val в качестве имени переменной — используйте myVal или что-то еще, что VBA еще не использовал.
Если вы действительно хотите использовать Val (и вы уверены, что вам вообще не понадобится доступ к функции Val ), вы можете использовать его как имя переменной если вы просто объявите его как таковой, например
У вас также будут проблемы с вашей линией, говоря
Количество и типы аргументов должны совпадать ожидалось. The number and types of arguments must match those expected. Неправильное число аргументов является либо пропущенный аргумент не является необязательным. Either there is an incorrect number of arguments, or an omitted argument is not optional. Аргумент можно опустить из-за обращения к определяемой пользователем процедуры, только если он был объявлен Optional в определении процедуры. An argument can only be omitted from a call to a user-defined procedure if it was declared Optional in the procedure definition.
Исправление ошибки To correct this error
Введите все необходимые аргументы. Supply all necessary arguments.
Убедитесь, что пропущенные аргументы являются необязательными. Make sure omitted arguments are optional. Если они отсутствуют, либо аргумента в вызове, либо объявить параметр Optional в определении. If they are not, either supply the argument in the call, or declare the parameter Optional in the definition.
I’m trying to figure this out and can’t.
I keep getting an error: «Compile error — Argument not optional». I am supplying the arguments and they are set as Optional!
Trying to pass a string and an array to a function and count occurrences of the array strings within the string passed.
Code stops running at the line:
with a «Compile error: Argument not optional» message highlighting the Val in the line:
2 Answers 2
Val is a VBA function which requires a single, mandatory, argument — therefore the compiler generates the message saying «Argument not optional» if you don’t provide that argument. (MSDN documentation of Val )
It is a bad idea to use VBA function names as variable names, so I would recommend you don’t use Val as a variable name — use myVal or anything else that VBA hasn’t already used.
If you really want to use Val (and you are sure that you won’t be needing to access the Val function at all), you can use it as a variable name if you simply declare it as such, e.g.
You will also have problems with your line saying
Access Compile Error: Argument not Optional
I have an access Database, this is similar to a previous question I asked, with a dropdown and a subform. I want to be able to choose an option from the dropdown and have it open a corresponding subform in the subform below. Here is my code.
Any suggestions? New to Access VBA
1 Answer 1
Your Function selectSubform(ID) Requires an ID parameter be passed, and you are not passing one. When you define the function:
You are telling the compiler that a Parameter named ID is required.
As an aside, I woiuld strongly recommend you place an Option Explicit statement at the top of each code module, and turn on the Option Explicit option in the editor. This will require you to indicate data types. As things sit, we have no idea what data type is expected as the ID parameter, and no idea what data type is returned by your function ( although it is implied by the use as an apparent integer in your Select Case statement). Making some assumptions, I would try the following changes (I can’t test this right now, nor can I speak to the rest of your code).
I am assuming here that the Selection in the combo box is the ID for the appropriate sub form. If not, you may have to clarify for us where the ID parameter is sourced from):
There may be other issues buried in here. However, setting your VBA IDE to require explicit variable declaration and adding Option Explicit to each of your code modules will go a long way towards helping you identify problems.
Общие сведения об именованных и необязательных аргументах
При вызове процедуры Sub или Function можно поставить аргументы позиционно, в том порядке, в какой они отображаются в определении процедуры, или вы можете предоставить аргументы по имени без связи с позицией.
Например, в следующей процедуре Sub приводится три аргумента.
Эту процедуру можно вызвать, поправив ее аргументы в правильном положении, каждый из которых был разимирован запятой, как показано в следующем примере.
Можно также вызвать эту процедуру, передав именованные аргументы, отделяя каждый из них запятой.
Именованный аргумент состоит из имени, сопровождаемого двоеточием и знаком равенства (:=), после которых указывается значение аргумента.
Именованные аргументы особенно удобны, когда вызывается процедура, имеющая необязательные аргументы. Если используются именованные аргументы, нет необходимости включать запятые для обозначения отсутствующих аргументов. Использование именованных аргументов облегчает отслеживание того, какие аргументы переданы и какие пропущены.
Необязательные аргументы предшествуют ключевому слову Необязательный в определении процедуры. Для необязательного аргумента в определении процедуры можно также указать значение по умолчанию. Например:
При вызове процедуры с необязательным аргументом можно выбрать, указывать или нет необязательный аргумент. Если необязательный аргумент не указывается, используется значение по умолчанию, если таковое имеется. Если не указано значение по умолчанию, аргумент будет для любой переменной указанного типа.
Следующая процедура включает в себя два необязательных аргумента: и varRegion varCountry переменные. Функция IsMissing определяет, был ли необязательный аргумент Variant передан процедуре.
Эту процедуру можно вызвать с помощью именных аргументов, как показано в следующем примере.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.