Содержание
- VBA Compile Error – Expected: expression
- Описание сообщений об ошибках компилятора скрипт движка
- Перечень наиболее встречающихся сообщений класса Error (для поиска нужной Вам ошибки используйте Ctrl+F.):
- Рассмотрим также некоторые сообщения классов warning и hint.
- Несколько рекомендаций:
VBA Compile Error – Expected: expression
I realise that the use of VBA in modifications and customisations is something that needs to be carefully considered with Microsoft Dynamics GP 2013 including a Silverlight based Web Client which cannot use VBA. I had a requirement from a client for a modification to the Debtor Enquiry (Customer Inquiry to the Americans reading) to include the sum of the displayed transactions on the window and as this was a small client with GP installed locally on each PC there is no requirement for the web client, I felt able to perform this change using Modifier using some VBA.
I added the required fields to the VBA project but encountered an error message when writing the VBA code to concatenate the fields into the SQL statement I was going to use to get the data;
It took me a few minutes to realise that the cause of the error is that To is a restricted keyword in VBA. Once I had realised this, I was able to quickly work around the error by updating the code to refer to the field To with more accuracy;
The red ringed text shows how I got VBA to accept the variable. The Me refers to the Debtor Enquiry window and specifies that To is not a keyword but a child object of the window.
Источник
Описание сообщений об ошибках компилятора скрипт движка
Часто бывает так, что скрипт не хочет компилироваться и компилятор выдает какую-то ошибку. В этой статье даны пояснения наиболее распространенным ошибкам компилятора Adrenaline Bot.
Перечень наиболее встречающихся сообщений класса Error (для поиска нужной Вам ошибки используйте Ctrl+F.):
0. expected but found . Обычно это сообщение возникает при синтаксической ошибке.Например,в случае не баланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).
Компилятор часто сообщает, что ‘end’ ожидается, например: x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)
1. is not a type identifier . Данное не является именем типа.
2. ‘;’ not allowed before ‘Else’ . Перед else нельзя ставить точку с запятой
3. Abstract method must be virtual or dynamic . Абстрактный метод должен быть виртуальным или динамическим.
4. Ambiguous overloaded call to . Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.
5. Array type required . Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).
6. Assignment to FOR-loop variable . Присваивание значения параметру FOR-цикла в теле цикла.
Например, вследствие описки дважды используется имя i в кратном цикле:
For i:= 1 to n do For i:= 1 to m do .
7. Break or Continue outside of loop . Break или Continue — не в цикле.
8. Cannot initialize local variables . Локальные переменные запрещено инициализировать (задавать им значения при описании).
9. Cannot assign to/read a read-only/write-only property . Присвоение значения свойству read/only и чтение свойства write/only запрещены.
10. Constant expression expected . В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.
11. Constant expression violates subrange bounds . Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но значение х будет искажено.
12. Constant or type identifier expected . Требуется имя типа или тип-диапазон.
13. Could not compile used unit . Компиляция присоединенного модуля невозможна.
14. Data type too large . Тип определяет структуру размером более 2 Гбайт; это слишком много.
15. Declaration expected but found . Пропущено описание или оператор.
16. Declaration of differs from previous declarations . Данный заголовок блока не соответствует упреждающему объявлению блока.
17. Default parameter must be by-value or constant . Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.
18. Expression expected . В этом месте программы должно стоять выражение.
19. Expression too complicated . Выражение излишне сложно для компиляции.
20. File type not allowed here . В этом месте или в этой роли файловую переменную нельзя использовать. Например, она не может быть формальным параметром-значением.
21. For loop control variable must be simple local variable . Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.
22. For loop control variable must have ordinal type . Параметр цикла должен иметь порядковый тип. Вещественный тип запрещен.
23. Function needs result type . В заголовке функции надо указывать тип ее результата.
24. Identifier expected but found . В этом месте должно стоять имя. Например, пропущено имя
функции после Function.
25. Identifier redeclared . описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.
26. Illegal character in input file . Запретный знак, например «русская» буква, либо вы оставили скобку >, убрав открывающую скобку <.
27. Illegal type in Read/Readln (Write/Writeln) statement . Элемент запрещенного типа в списке ввода/вывода.
28. Incompatible types . Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано присваивание z:= 0 (работать надо с полями записи).
29. Invalid function result type . Недопустимый тип результата функции.
30. Label already defined: . уже помечает другой оператор.
31. Left side cannot be assigned to . He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.
32. Line too long . В строке программного текста больше 255 знаков.
33. Low bound exceeds high bound . Нижняя граница превышает верхнюю.
34. Missing operator or semicolon .Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).
35. Missing parameter type . He указан тип формального параметра-значения или параметра процедурного типа.
36. Not enough actual parameters . He хватает фактических параметров.
37. Need to specify at least one dimension . Нужно задавать в операторе SetLength хотя бы один размер динамического массива.
38. Number of elements differs from declaration . Число элементов в структурной константе не соответствует ее описанию.
39. Operator not applicable to this operand type . Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.
40. Order of fields in record constant differs from declaration . Порядок полей в записи-константе не соответствует описанию записи.
41. Ordinal type required . Требуется порядковый тип (например, в индексе).
42. Out of memory . Компилятору не хватает памяти.
43. Statement expected but found . В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание ( ). Ошибочная форма обращения к процедуре Procedure или к функции Function также вызывает сообщение.
44. Sets may have at most 256 elements . Множество (тип Set) не может содержать более 256 элементов.
45. Slice standard function only allowed as open array argument . Функцию Slice можно использовать лишь как фактический параметр
46. Statement not allowed in interface part . Предложения в секции интерфейса программного модуля недопустимы.
47. Syntax error in real number . Синтаксическая ошибка в записи числа вещественного типа.
48. There is no overload version of that can be called with these arguments .Не предусмотрен перегружаемый блок , который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.
49. Too many actual parameters . Фактических параметров больше, чем формальных.
50. Type actual and formal var parameters must be identical . Тип фактического параметра должен быть идентичен типу
формального параметра-переменной.
51. Type of expression must be . Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.
52. Undeclared identifier: . Не описано . Проверьте есть ли описание в нужном месте,нет ли опечаток в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.
53. Unexpected end of file in comment started on line . Неожиданный конец файла при незавершенном комментарии, начало комментария — в строке N.
54. Unit name mismatch: . Имя модуля ошибочно.
55. Unsatisfied forward or external declaration . Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).
56. Unterminate string . He закрыта апострофом строка-константа типа string.
Рассмотрим также некоторые сообщения классов warning и hint.
1. Return value of function might be undefined . В теле функции нет присваивания ее результата.
2. Variable might not have been initialized . Указывает имя переменной, которой не задали значения.
3. For-Loop variable may be undefined after loop . Попытка использования значения параметра For-цикла после завершения этого цикла.
4. Text after final ‘END.’ ignored by compiler . Текст, идущий за конечной строкой модуля, игнорируется компилятором.
5. Variable is declared but never used in . Обращает внимание на переменную , описанную,но не нашедшую применения.
6. Value assigned to never used . Хотя бы одно значение переменной никак не использовано.
Несколько рекомендаций:
Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки:
Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.
Источник
I realise that the use of VBA in modifications and customisations is something that needs to be carefully considered with Microsoft Dynamics GP 2013 including a Silverlight based Web Client which cannot use VBA. I had a requirement from a client for a modification to the Debtor Enquiry (Customer Inquiry to the Americans reading) to include the sum of the displayed transactions on the window and as this was a small client with GP installed locally on each PC there is no requirement for the web client, I felt able to perform this change using Modifier using some VBA.
I added the required fields to the VBA project but encountered an error message when writing the VBA code to concatenate the fields into the SQL statement I was going to use to get the data;
Microsoft Visual Basic: Compile error: Expected: expression
It took me a few minutes to realise that the cause of the error is that To is a restricted keyword in VBA. Once I had realised this, I was able to quickly work around the error by updating the code to refer to the field To with more accuracy;
The red ringed text shows how I got VBA to accept the variable. The Me refers to the Debtor Enquiry window and specifies that To is not a keyword but a child object of the window.
I’m trying to set a value to the return value of another function, but am getting stuck on this line:
Set tempMergeValue = TypeRegxFunc(MyRange.Rows(iCounter).Columns(1).Value,'([^.]+)')
The TypeRegxFunc is here
Function TypeRegxFunc(strInput As String, regexPattern As String) As String
Dim regEx As New RegExp
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = regexPattern
End With
If regEx.Test(strInput) Then
Set matches = regEx.Execute(strInput)
TypeRegxFunc = matches(0).Value
Else
TypeRegxFunc = "not matched"
End If
End Function
asked Oct 28, 2019 at 16:23
Trevor NewhookTrevor Newhook
8771 gold badge10 silver badges26 bronze badges
1
You have to replace apostrophes ''
with quotation marks ""
, otherwise VBA will interpret that as a comment.
Change this line:
Set tempMergeValue = TypeRegxFunc(MyRange.Rows(iCounter).Columns(1).Value,'([^.]+)')
With this one:
Set tempMergeValue = TypeRegxFunc(MyRange.Rows(iCounter).Columns(1).Value,"([^.]+)")
And it will work.
I hope this helps.
answered Oct 28, 2019 at 16:31
I’m trying to set a value to the return value of another function, but am getting stuck on this line:
Set tempMergeValue = TypeRegxFunc(MyRange.Rows(iCounter).Columns(1).Value,'([^.]+)')
The TypeRegxFunc is here
Function TypeRegxFunc(strInput As String, regexPattern As String) As String
Dim regEx As New RegExp
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = regexPattern
End With
If regEx.Test(strInput) Then
Set matches = regEx.Execute(strInput)
TypeRegxFunc = matches(0).Value
Else
TypeRegxFunc = "not matched"
End If
End Function
asked Oct 28, 2019 at 16:23
Trevor NewhookTrevor Newhook
8771 gold badge10 silver badges26 bronze badges
1
You have to replace apostrophes ''
with quotation marks ""
, otherwise VBA will interpret that as a comment.
Change this line:
Set tempMergeValue = TypeRegxFunc(MyRange.Rows(iCounter).Columns(1).Value,'([^.]+)')
With this one:
Set tempMergeValue = TypeRegxFunc(MyRange.Rows(iCounter).Columns(1).Value,"([^.]+)")
And it will work.
I hope this helps.
answered Oct 28, 2019 at 16:31
I am working on some homework and I can’t figure out why my code won’t work. The assignment is to request a name then respond in red text in B10.
Here is my code:
Any help would be great- Thanks!
asked Apr 7, 2014 at 1:21
2
This error comes from the line With RAnge("b10").Font.ColocarIndex = 3
, With
supose to be used only to objects (not expressions)
sName = Application.InputBox(Prompt:="Please enter your name.", Type:=2)
With Sheets("MyNewSheet").Range("B10")
.Font.ColorIndex = 3
.Value = sName
End With
answered Apr 7, 2014 at 2:18
Roger BarretoRoger Barreto
1,9541 gold badge16 silver badges21 bronze badges
Consider:
Sub qwerty()
Sheets("MyNewSheet").Activate
With Range("B10")
.Font.ColorIndex = 3
strName = Application.InputBox(Prompt:="Please enter your name.", Type:=2)
.Value = strName
End With
End Sub
answered Apr 7, 2014 at 2:09
Gary’s StudentGary’s Student
94.9k9 gold badges58 silver badges97 bronze badges
-
If you would like to post, please check out the MrExcel Message Board FAQ and register here. If you forgot your password, you can reset your password.
-
#1
Hi, I keep getting the error messgae «compile error: expected expression»
VBA also highlights :=
Sub Solve()
SolverOk.SetCell:= «$I$15″, MaxMinVal:=1, ValueOf:=»0″, ByChange:=»$I$3:$I$12»
SolverSolve UserFinish:=True
End Sub
Any ideas? Thanks in advance.
Shade all formula cells
To shade all formula cells: Home, Find & Select, Formulas to select all formulas. Then apply a light fill color.
shg
MrExcel MVP
-
#2
Welcome to the board.
Replace the dot after SolverOK with a space.
-
#3
Oh it worked. Thanks a lot.
shg
MrExcel MVP
-
#4
You’re welcome, good luck.
- Threads
- 1,187,204
- Messages
- 5,962,202
- Members
- 438,594
- Latest member
- fptthanhhoas
-
12-19-2018, 01:19 AM
#1
Registered User
Help with «Compile Error: Expected: Expression»
Hello all,
I have attached a spreadsheet containing VBA code provided to me by someone I am unable to contact to fix. There are three sections in red that are causing the message «Compile Error: Expected: Expression.» The spreadsheet is designed to pull historical data from Yahoo finance for any ticker symbol listed on the sheet tab. I am a total newbie with VBA and Macros, thus hoping someone here will help me correct the code and get the workbook functioning properly. Thanks
Last edited by Dan Imal; 12-19-2018 at 01:24 AM.
-
12-19-2018, 01:47 AM
#2
Re: Help with «Compile Error: Expected: Expression»
Your code needs a space between .Sort and the «_»
When the parameters are on separate lines, you need a space and a «_» after the comma:
-
12-19-2018, 12:45 PM
#3
Registered User
Re: Help with «Compile Error: Expected: Expression»
Thanks protonLeah! I was able to correct all the errors based on your advice. Now on to figuring out why its not retrieving the financial data from Yahoo Finance.
If I can’t figure that out on my own I may be posting a new thread.