Argument not optional vba excel ошибка

Public Function RETURN_Equipment(Optional category As String) As Collection
    Dim config As classConfiguration
    Set config = New classConfiguration

    Dim item As classItem
    Set item = New classItem

    Dim myCollection As Collection
    Set myCollection = New Collection

    For Each config In Configurations
        For Each item In config.colItems
            If IsMissing(category) Then   
                myCollection.add item
            ElseIf InStr(category, "mainframe") <> 0 And item.category = "mainframe" Then
                myCollection.add item
                MsgBox "Fired!"                
            ElseIf category = "accessory" And item.category = "accessory" Then
            Else
            End If
        Next
    Next

    RETURN_Equipment = myCollection
End Function

I keep getting

Compile error:
Argument not optional

I get the error on the last line

RETURN_Equipment = myCollection

I understand the error message, its telling me I did not fill out a parameter. But I only have one parameter, and I’ve declared it optional. It looks like the code thinks I’m trying to call the function from the function?

What gives?

GSerg's user avatar

GSerg

76.6k17 gold badges160 silver badges346 bronze badges

asked May 9, 2014 at 21:14

Robomato's user avatar

3

Anytime you assign an object you need to use the set keyword.

set RETURN_Equipment = myCollection

answered May 9, 2014 at 21:16

Brad's user avatar

BradBrad

11.9k4 gold badges46 silver badges73 bronze badges

1

I was getting this error because I was using the wrong function name when trying to return a result from a function. I was doing this:

Function MyFuncA(arg as String)
    MyFuncB = arg 'The problem is I'm using MyFuncB instead of MyFuncA
End Function

This happened because I copied a function from somewhere else and changed the name, but not the return statement. This is not the OP’s problem, but I was getting the same error message.

answered Jul 8, 2016 at 19:15

user2023861's user avatar

user2023861user2023861

8,0309 gold badges58 silver badges86 bronze badges

Because you’ve specified the Optional Parameter as a string it will default to an empty string if you’ve not specified a value.

This means it can’t be missing

If you’d specified it as

Public Function RETURN_Equipment(Optional category) As Collection

It would be a variant and that could be missing, although you’d also be able to mess things up by passing non string variants as the category parameter

The best course of action is probably to replace

If IsMissing(category) Then 

with

If category = "" Then 

And as Brad has pointed out you’ll need to use Set

Set RETURN_Equipment = myCollection

For full details check this
http://msdn.microsoft.com/en-us/library/office/gg251721%28v=office.15%29.aspx

answered May 9, 2014 at 22:23

Tom Page's user avatar

Tom PageTom Page

1,2111 gold badge7 silver badges8 bronze badges

1

Public Function RETURN_Equipment(Optional category As String) As Collection
    Dim config As classConfiguration
    Set config = New classConfiguration

    Dim item As classItem
    Set item = New classItem

    Dim myCollection As Collection
    Set myCollection = New Collection

    For Each config In Configurations
        For Each item In config.colItems
            If IsMissing(category) Then   
                myCollection.add item
            ElseIf InStr(category, "mainframe") <> 0 And item.category = "mainframe" Then
                myCollection.add item
                MsgBox "Fired!"                
            ElseIf category = "accessory" And item.category = "accessory" Then
            Else
            End If
        Next
    Next

    RETURN_Equipment = myCollection
End Function

I keep getting

Compile error:
Argument not optional

I get the error on the last line

RETURN_Equipment = myCollection

I understand the error message, its telling me I did not fill out a parameter. But I only have one parameter, and I’ve declared it optional. It looks like the code thinks I’m trying to call the function from the function?

What gives?

GSerg's user avatar

GSerg

76.6k17 gold badges160 silver badges346 bronze badges

asked May 9, 2014 at 21:14

Robomato's user avatar

3

Anytime you assign an object you need to use the set keyword.

set RETURN_Equipment = myCollection

answered May 9, 2014 at 21:16

Brad's user avatar

BradBrad

11.9k4 gold badges46 silver badges73 bronze badges

1

I was getting this error because I was using the wrong function name when trying to return a result from a function. I was doing this:

Function MyFuncA(arg as String)
    MyFuncB = arg 'The problem is I'm using MyFuncB instead of MyFuncA
End Function

This happened because I copied a function from somewhere else and changed the name, but not the return statement. This is not the OP’s problem, but I was getting the same error message.

answered Jul 8, 2016 at 19:15

user2023861's user avatar

user2023861user2023861

8,0309 gold badges58 silver badges86 bronze badges

Because you’ve specified the Optional Parameter as a string it will default to an empty string if you’ve not specified a value.

This means it can’t be missing

If you’d specified it as

Public Function RETURN_Equipment(Optional category) As Collection

It would be a variant and that could be missing, although you’d also be able to mess things up by passing non string variants as the category parameter

The best course of action is probably to replace

If IsMissing(category) Then 

with

If category = "" Then 

And as Brad has pointed out you’ll need to use Set

Set RETURN_Equipment = myCollection

For full details check this
http://msdn.microsoft.com/en-us/library/office/gg251721%28v=office.15%29.aspx

answered May 9, 2014 at 22:23

Tom Page's user avatar

Tom PageTom Page

1,2111 gold badge7 silver badges8 bronze badges

1

Compile error: Argument not optional

Before we dive into the solution for the error above, let us go back to basics to make sure you understand what a function is. This will be important for fixing and troubleshooting the error. Feel free to skip ahead if you have a good grasp of this concept already.

What is a function?

A block of code that is reusable can be called a “function.” The word “reusable” tells us that the function can be called any number of times and from anywhere in the project.

If we need to make an enhancement or modification in any flow of action which is already encapsulated in a function, we only need to make the change in one place — the function. This will handle the change in flow wherever the function has been called.

The block of code with a function name that is called in several places is named the “Called Function” and the line of code that calls the function is the  “Calling function.”

Arguments in a function

Let’s say you have some data that’s required for the block of code — the function — to programmatically run. This data can be input in the same line as the function name.

These inputs are called as “Arguments” or “Parameters” in programming. We can define the data type of the arguments along with the variable names when defining the function. However, this is not mandatory.

Based on the usage of the variable arguments in the code, the data type of the arguments can be assumed too.

Return value in a function

After running the block of code programmatically, there may be some information that the function wants to pass back to the calling function. This is called the return value. Optionally, the data type of the return value can also be mentioned while defining the function.

Defining a function with arguments and a return value

Function

Let’s imagine a function called from a sub procedure of a save button on a student admission form. Let us name the function fn_SaveStudent. The function will take all the field values from the form GUI and insert them as a student record into a database.

Arguments

The field values need to be sent as arguments from the calling function to the called function.

Return Value

In turn, the database will generate a “Student ID” automatically. The function can return this value to the calling function, which in turn can display the “Student ID” on any field in the student admission form”  or in a message box.

Syntax of a function

Function <Function’s name> ([arg1 [, arg2 [, arg3 [ …… ] ] ] ] ])

<function code>

End Function

Where “arg” represents an argument.

For Example:

'Sub – procedure for the click event of a save button
Private Sub cmdSave_Click()
    strName = txtName.Value
    intAge = lstAge.Value
    strGen = lstgender.Value
    lngContact = txtcontact.Value
    Call fn_SaveStudent(strName, intAge, strGen, lngContact)
End Sub
Function fn_SaveStudent(strName As String, intAge As Integer, strGen As String, lngContact As Long) As String
    'code to insert the variable values in the parameters into the DB and get back the generated Student Id
    fnSaveStudent = strstudentId
End Function

Built-In Functions

These functions are the predefined blocks of code offered by programming languages for various purposes. In VBA, we have a wide range of built-in functions. Some examples are found below.

S.no Function Name Quick Description Syntax
1 Split Split a string using a character as a delimiter. An array of words is returned SPLIT ( <expression> [,<delimiter>] [,<limit>] [,<compare>])
2 Cdbl Convert expression to a double data type CDBL ( <expression> )
3 chr Returns a string (character value) that corresponds to te ascii value passed as a parameter. chr ( <ascii value> )
4 Mid Returns the middle part of a string when starting position and length are provided MID ( <string>, <start> [,<length>])
5 Left Returns the left portion of a string when length is specified LEFT ( <string>, <length> )
6 Right Returns the right portion of a string when length is specified RIGHT ( <string>, <length> )
7 Trim Trim the leading and trailing spaced of a string Trim ( <string> )
8 Ucase Converts all characters of the string to Upper case Ucase ( <string> )
9 Lcase Converts all characters of the string to Lower case Lcase ( <string> )
10 Instr Checks if one string is a substring of another string. If yes, it returns the starting position or else it returns 0. INSTR([<start>] ,<string1> ,<string2> [,<compare>])
11 Now Returns the current system date and time now()
12 Cstr Converts the passed parameter value to a string cstr ( <expression> )
13 Val Provides the mathematical value of the parameter. value ( <expression> )
14 Ltrim Removes the leading spaces of the string and returns it. Ltrim ( <string> )
15 Rtrim Removes the trailing spaces of the string and returns it. Rtrim ( <string> )
16 Date Returns the current system date date ( <expression> )
17 Day Returns the day from the date parameter passed. Day (<a date in the yyyy,mm,dd format>)
18 Sin Returns the sin value Sin  ( < expression> )
19 Tan Returns the tangent value Tan  ( < expression> )
20 Cot Returns the Cotangent value Cot  ( < expression> )
21 Log Returns the log value Log  ( < expression> )
22 Cos Returns the cos value Cos  ( < expression> )
23 Isnull Returns a boolean value depending on whether the parameter value is equivalent to “null” or not Isnull  ( <expression> )
24 Isnumeric Returns a boolean value depending on whether the parameter value is equivalent to a numeric value or not Isnumeric ( <expression> )
25 Rate Returns a value of double data type as the interest rate for a series of equal cash flows at regular intervals. RATE( <number_payments>, <payment>, <PV>, [<FV>], [<Type>], [<Estimate>] )
26 Cint Comvert the parameter value to an integer value cint ( <expression> )
27 Mkdir Make the directory i.e. create a folder mkdir ( <path_name> )
28 Cvar Convert the paramter value to a value of variant data type CVAR(expression)
29 Ccur Convert the paramter value to a value of currency data type ccur ( <path_name> )
30 cdate Convert the paramter value to a date cdate ( <path_name> )

Optional arguments & the error “Argument not optional”

User-defined functions

For user-defined functions, the arguments are considered optional or mandatory depending on whether you used the “OPTIONAL” keyword when defining the parameters in the called function.

Example

In this called function, no argument is defined with the “Optional” keyword, so when an argument is not passed in the calling function, we see the error message “Argument not Optional.”

Compile error argument not optional

In order to resolve this, we need to either pass the parameter in the calling function or mark the rollno argument as optional. The below piece of code fixes the error.

Sub demo1()
    Call fn_demo1("Baby Aneesh", "A+")
End Sub
Function fn_demo1(strname, strgrade, Optional ByVal introllno As Integer)
    'Just display the values of all parameters
    MsgBox "Student name: " &amp;amp;amp; strname &amp;amp;amp; vbCrLf &amp;amp;amp; "Grade: " &amp;amp;amp; strgrade &amp;amp;amp; vbCrLf &amp;amp;amp; "Roll no: " &amp;amp;amp; introllno
End Function

Built-in Functions

In the case of built-in functions, the syntax clearly states whether the parameters are optional or mandatory.

Example

Syntax of Split Function from the table above:

SPLIT ( <expression> [,<delimiter>] [,<limit>] [,<compare>])

Here only the expression i.e. the string is a mandatory argument. So, the code runs successfully even if the last two optional arguments are not passed.

Function that works

However if the mandatory argument is not passed, it results in the compile error “Argument not optional”.

Compile error argument not optional

To resolve this compile error, the mandatory arguments need to be passed to the function call.

Conclusion

The compile error discussed in this article is self-explanatory if you understand the purpose and usage of functions in general. We need to pass all mandatory arguments of the expected data type in order to avoid compile errors like this.

See also:

You’ve entered too many arguments for this function

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

#1

17.09.2015 02:04:57

Доброй ночи всем!

В модуле листа условие, если ячейка O7=BACK, то запустить макрос

Код
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address <> "$O$7" Then Exit Sub
   If Target = Back Then Call Back
End Sub

В стандартном модуле должен после этого запуститься макрос Back.
Увы выдается ошибка «argument not optional». Никак её побороть не могу, подскажите куда копнуть!?

Инфу брал из:

Скрытый текст

Во вложении скрин ошибки и сама книга. Внимательно (!) она без программы, из которой по DDE получает инфу будет выдавать ошибки.
Цитата из файла помощи к программе:

Скрытый текст

Прикрепленные файлы

  • error argument not optional.jpg (38.5 КБ)
  • Feeder.zip (60.9 КБ)

Изменено: Maxim3917.09.2015 11:20:12

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Maxim39, здравия. Во-первых, код следует оформлять соответствующим тэгом. (кнопка на панели инструментов области текста сообщения <…>)
Во-вторых, Вы вызываете процедуру Back без параметров, а она подразумевает передачу ей обязательных параметров, судя по скрину.

Изменено: JayBhagavan17.09.2015 02:15:57


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

#3

17.09.2015 02:21:50

Доброй ночи,

JayBhagavan

!
Спасибо что не спите (=
И за быстрый ответ, сейчас буду пробовать.

Ссори, в VBA слаб… не понял про теги. Такой код тоже вызывает ошибку:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$O$7" Then
     If IsEmpty(Target) Then Exit Sub
        IF Range("O7") = Back THEN
   CALL Back
     End If
End Sub 
'Инфа отсюда http://www.programmersforum.ru/showthread.php?t=60413 (второе сообщение)

Изменено: Maxim3917.09.2015 13:39:11

 

TSN

Пользователь

Сообщений: 217
Регистрация: 07.05.2014

Процедура

Back

принимает четыре аргумента указанные в скобках после названия (channel as string, selection as string ….).
Ошибка означает, что Вы пытаетесь запустить

Back

без передачи аргументов, что неприемлемо.
Решение: 1. Запуск CALL Back в такой форме CALL Back («Пример1», «Пример2», «Цена вопроса», «Еще чтото»).
Таким образом запуск процедуры  Back будет выполнен успешно т.к. она получила все объявленные аргументы.
2. Второй вариант сделать аргументы опциональными и присвоить им значения по умолчанию.

Что касается тегов VBA не причем. В момент когда создаете сообщение на форуме и хотите вставить код, часть кода нужно нажать

Кнопка форматирования кода <…>

после чего вставить код в форму с серым фоном.

Изменено: TSN17.09.2015 08:45:38

 

Юрий М

Модератор

Сообщений: 60912
Регистрация: 14.09.2012

Контакты см. в профиле

#5

17.09.2015 10:00:47

Цитата
Maxim39 написал: Ссори, в VBA слаб… не понял про теги

VBA тут ни причём )) Ищите такую кнопку (см. скрин) для оформления кода.

Прикрепленные файлы

  • Тег VBA.jpg (19.2 КБ)

 

The_Prist

Пользователь

Сообщений: 14412
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#6

17.09.2015 11:16:46

Предположу, что Back — это просто текст в ячейке и задача сравнить значение ячейки и если значение в ячейке Back, то вызвать эту процедуру

Код
IF Target = "Back" THEN Call Back

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

#7

17.09.2015 14:08:52

TSN

,

Юрий М

— с тегом поправил, спасибо!

The_Prist

— да, верно Back — это просто текст. Увы тоже выдает ошибку, Excel сам выделяет Target, может в этом подсказка!?

Цитата
TSN написал:
Решение: 1. Запуск CALL Back в такой форме CALL Back («Пример1», «Пример2», «Цена вопроса», «Еще чтото»).

Когда условие срабатывает (в ячейке O7 слово BACK), она вызывает Back там так и прописано, вписал как Вы написали, тоже ошибка.

Прикрепленные файлы

  • error argument not optional 2.jpg (61.53 КБ)

 

The_Prist

Пользователь

Сообщений: 14412
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Target.Value = «BACK»

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Юрий М

Модератор

Сообщений: 60912
Регистрация: 14.09.2012

Контакты см. в профиле

Поменяйте или контрольное слово или имя вызываемого макроса, чтобы не было путаницы )

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

#10

17.09.2015 14:34:51

Цитата
The_Prist написал: Target.Value = «BACK»

Спасибо, что помогаете!

Код
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address = "$O$7" Then Exit Sub
   If Target.Value = "B" Then Call Back 'теперь выделяется call Back
End Sub

Цитата
Юрий М написал: Поменяйте контрольное слово

Можно поменять кодовое слово на на анг B, ошибка не из-за этого…  

Изменено: Maxim3917.09.2015 15:11:58

 

Юрий М

Модератор

Сообщений: 60912
Регистрация: 14.09.2012

Контакты см. в профиле

#11

17.09.2015 14:44:57

Цитата
Maxim39 написал: ошибка не из-за этого…

Я не про ошибку — про путаницу ))

 

Sclif666

Пользователь

Сообщений: 752
Регистрация: 06.04.2015

Уже говорилось, что Sub Back требует параметров.
К тому же Module1 (судя по скринам) содержит кучу ошибок.

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

#13

17.09.2015 14:52:46

Цитата
Sclif666 написал: Уже говорилось, что Sub Back требует параметров.

Что значит требует параметров? Можно самый простой пример  

 

The_Prist

Пользователь

Сообщений: 14412
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Короче приложите свой файл и проблемы уйдут. Вы чего-то там наляпали, не знаете сами чего. Видимо ни процедур, ни других нужных вещей в проекте нет. Вот ошибки и лезут одна за другой.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

Файл приложил сразу в первом посте, только внимательно, перед этим другие рабочие книги закрыть и заодно отключить макросы, т.к. книга будет ссылаться на программу которая у Вас не запущена и будет выдавать ошибки!

 

The_Prist

Пользователь

Сообщений: 14412
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#16

17.09.2015 15:14:32

Тогда не буду скачивать. Зачем ковырять проект, который заведомо содержит неисправляемые ошибки.

Если Ваша процедура BACK записана вроде:

Код
Function BACK(ByVal sArg as string)
'непосредственно код процедуры
End Function

значит она с аргументами. Т.е. если внутри скобок что-то написано и там есть хоть один As без Optional(Optional sArg as string) — значит надо в эту функцию/процедуру передать этот sArg:

Код
call Back(Target.Value)

Совет такой: потратьте пару часиков на чтение о передаче аргументов в функцию. Да и вообще об азах VBA.
Форумы никак не для обучения Вас всех самых начальных азов — это Вы должны почерпнуть из литературы и прочих материалов, коих в сети толпы.
Я привел лишь маленький пример и если не поймете — я уж извините, из темы устранюсь. Хотя может кому-то сейчас захочется посвятить Вас во все азы программирования в VBA, чтобы Вы поняли что такое аргумент в функции/процедуру и когда его надо обязательно передавать.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Sclif666

Пользователь

Сообщений: 752
Регистрация: 06.04.2015

#17

17.09.2015 15:16:00

Код
Sub Back(channel As String, selection As String, price As String, amount As String)
    Back "HILO_STANDARD", "Card 1 or further", "back_price", 5 'БЕСКОНЕЧНАЯ РЕКУРСИЯ?
'''''End Sub - У ПРОЦЕДУРЫ М.Б. ТОЛЬКО ОДИН END SUB

Dim feed As Integer, counter As Integer
Dim data As String
counter = 0
feed = 0
While counter < 5 And feed = 0
  feed = Application.DDEInitiate("xfeeder", "betting")
Wend
If feed > 0 Then

  data = "back|" & channel & "|" & selection & "|" & price & "|" & amount

  
  Dim cw As Worksheet, ldws As Worksheet
  Set cw = ThisWorkbook.ActiveSheet
  Set ldws = ThisWorkbook.Worksheets("Loading")
  If cw.name = ldws.name Then
    Set cw = ThisWorkbook.Worksheets(1)
    cw.Activate
  End If
  ldws.Activate
  Range("AA1000") = data
  Application.DDEPoke feed, "bet", Range("AA1000")
  cw.Activate
End If
End Sub

'ПРИМЕР ВЫЗОВА
SUB EXAMPLE
  CALL BACK("channel", "selection", "price", "amount")
END SUB
 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

The_Prist

, спасибо Вам за помощь и потраченное время, заходил на Ваш сайт, понимаю что занимаетесь сложными проектами и обучение начинающих не в приоритете. Книги скачал, но многое не понятно… буду дальше изучать.

Sclif666

, спасибо за хороший пример, что-то я ступил с несколькими End Sub, буду дальше пробовать.

Спасибо всем за подсказки, постараюсь разобраться! Если проблему решу — отпишусь здесь.  

Изменено: Maxim3917.09.2015 15:47:27

 

Maxim39

Пользователь

Сообщений: 47
Регистрация: 16.08.2015

#19

18.09.2015 01:06:00

Sclif666

, огромное СПАСИБО,только сейчас понял свою ошибку, сделал как Вы написали и всё заработало как надо! (см.скриншот)
Вы хорошие люди, что не ленитесь и помогаете таким новичкам как я!  :)

Прикрепленные файлы

  • error argument not optional 3.jpg (75.74 КБ)

  • Remove From My Forums
  • 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»

    End Function

    Can anyone enlighten me?

Answers

  • Hi Gazza101,

    If you write this:

    Function InsertVaRSummaryFigure(SummarySheet As String)

    This means, that the parameter SummarySheet is not optional. You
    must
    give that to the function.

    And if you write that:

    Call InsertVaRSummaryFigure 

    you have no transfer parameter, so the compiler said: «Complie Error: Argument not optional»

    You can try this:

    Function InsertVaRSummaryFigure(Optional SummarySheet As String = "NameOfYourSheet")

    or this:

    Call InsertVaRSummaryFigure("NameOfYourSheet")

    or both if you want a standard Sheet, or another different:

    Function InsertVaRSummaryFigure(Optional SummarySheet As String = "Sheet1")
    Call InsertVaRSummaryFigure

    or

    Call InsertVaRSummaryFigure("SecondSheetInBla")

    So, try

    and have a look @ http://msdn.microsoft.com/en-us/library/f25e2b6b.aspx


    Please ‘Mark as Answer’ if I helped. This helps others who have the same problem!

    • Marked as answer by

      Wednesday, September 29, 2010 11:54 AM

Понравилась статья? Поделить с друзьями:
  • Arerr 623 ошибка аутентификации
  • Are you believing me исправить ошибку
  • Arduino was not declared in this scope ошибка
  • Arduino nano ошибка загрузки скетча
  • Arduino lcd begin ошибка