Compile error expected list separator or

I am trying to create an Excel VBA button code which will copy a data in columns A8:A399, B8:B399, C8:C399, D8:D399, E8:E399, F8:F399, G8:G399, H8:H399 one of the excel workbook to another workbook

I am trying to create an Excel VBA button code which will copy a data in columns A8:A399, B8:B399, C8:C399, D8:D399, E8:E399, F8:F399, G8:G399, H8:H399 one of the excel workbook to another workbook without opening it. But the Code I am using gives me an error message saying:

Compile Error, Expected: List Separator or )

and it highlights the (:) in Set myData = Workbooks.SaveAs(“C:UsersathifDesktopTest_PosDataBase.xlsx”). Please tell me a solution.

Here is my Code:

Private Sub CommandButton1_Click()
    LR = Range("A399").End(xlUp).Row
    LR1 = Range("B399").End(xlUp).Row
    LR2 = Range("C399").End(xlUp).Row
    LR3 = Range("D399").End(xlUp).Row
    LR4 = Range("E399").End(xlUp).Row
    LR5 = Range("F399").End(xlUp).Row
    LR6 = Range("G399").End(xlUp).Row
    LR7 = Range("H399").End(xlUp).Row

    Dim itemIndex As String
    Dim itemNumber As String
    Dim itemDetails As String
    Dim itemPrice As Single
    Dim itemCust_nam As String
    Dim itemMobile As String
    Dim itemDate As String
    Dim itemTime As String
    Dim myData As Workbook

Worksheets(“Sheet1”).Select
    itemIndex = Range("A8:A" & LR)
    itemNumber = Range("B8:B" & LR1)
    itemDetails = Range("C8:C" & LR2)
    itemPrice = Range("D8:D" & LR3)
    itemCust_nam = Range("E8:E" & LR4)
    itemMobile = Range("F8:F" & LR5)
    itemDate = Range("G8:G" & LR6)
    itemTime = Range("H8:H" & LR7)


Set myData = Workbooks.SaveAs(“C:UsersathifDesktopTest_PosDataBase.xlsx”)

Worksheets(“Sales”).Select
Worksheets(“Sales”).Range(“A1”).Select
RowCount = Worksheets(“Sales”).Range(“A1”).CurrentRegion.Rows.Count
With Worksheets(“Sales”).Range(“A1”)
    .Offset(RowCount, 0) = itemIndex
    .Offset(RowCount, 1) = itemNumber
    .Offset(RowCount, 2) = itemDetails
    .Offset(RowCount, 3) = itemPrice
    .Offset(RowCount, 4) = itemCust_nam
    .Offset(RowCount, 5) = itemMobile
    .Offset(RowCount, 6) = ItemData
    .Offset(RowCount, 7) = itemTime
End With

myData.Save
End Sub

  • Remove From My Forums
  • Question

  • Hello,

    Please, advise me where is the error in the following code:

    Function Filter(Number As Integer, Name As String)
       Select Case Name
        Case «aaa»
            Filter = True
        Case «bbb»
            Filter = True
        Case Else
            Select Case Number
                Case 79001
                    Filter = True
                Case Else
                    Filter = False
            End Select
        End Select
    End Function

    Thank you in advance!

    • Edited by

      Friday, May 26, 2017 10:26 PM

Answers

  • Function ABCDEFG(Number1 As Integer, Name1 As String)

        ….

            Select Case Number1
                Case 79001

    Hi Kate,

    You can use nested Select Case statements, as you have already demonstrated in your example.

    The problem lies in  Case 79001. This value is too large for an Integer. You can better use the Long type..

    You can further simplify your code:

    Function ABCDEFG(Number1 As Long, Name1 As String) As Boolean
        Select Case Name1
        Case "aaa", "bbb": ABCDEFG = True
        Case Else
            Select Case Number1
            Case 79001: ABCDEFG = True
            End Select
        End Select
     End Function
    

    as this function defaults False as result.

    Imb.

    • Marked as answer by
      KateStsv
      Saturday, May 27, 2017 10:38 PM

  • ABCDEFG(20001;»gh»)

    «Compile error: Expected list separator or )»

    Hi Kate,

    The arguments are to be separated by a comma:

        boolean_result = ABCDEFG(20001,»gh»)

    Imb.

    • Marked as answer by
      KateStsv
      Saturday, May 27, 2017 10:38 PM

  • #2

What am I missing? I have a macro workbook trying to save as .xlsx workbook in folder xlsx_xlsx.

I get compile error: Expected: list separator or )

Code:

Sub ssFile()
  ActiveWorkbook.SaveAs [B][COLOR="#FF0000"]([/COLOR][/B]"C:Userspnix4Desktopxlsm_xlsxHireTerm  “ & Format(Now(), “DD-MMM-YYYY”) & “.xlsx”[B][COLOR="#FF0000"])[/COLOR][/B]
End Sub

Your code worked fine for me once I replaced the «stylized» quote marks your code above is using with normal quote marks.

I would also note that you do not need the surrounding parentheses that I highlighted in red above.

I don’t know if it was intentional or not, but you have two spaces after the word «HireTerm» (normally, I would expect only one space there).

  • #3

try this:

Code:

    ActiveWorkbook.SaveAs "C:Userspnix4Desktopxlsm_xlsxHireTerm  " & Format(Now(), "DD-MMM-YYYY"), xlOpenXMLWorkbook

Edit: of course if the Activeworkbook is the workbook running the code then it will need to be in macro-enabled format: xlOpenXMLWorkbookMacroEnabled

Last edited: May 17, 2017

Legacy 319654

Guest


  • #4

Thanks, I retyped regular quotes and () and it worked…

  • #5

some of your quotes look funny

Code:

Sub Test()
    Dim a, b, c As String
    a = "C:Userspnix4Desktopxlsm_xlsxHireTerm  “"
    b = Format(Now(), “DD - MMM - YYYY”)
    c = “.xlsx”
    
    MsgBox a & b & c
End Sub

this does not compile because of … c = “.xlsx”

that is probably your problem

vba actually inserted a quote at the end of my a variable so vba is not liking your quote characters

Last edited: May 17, 2017

Legacy 319654

Guest


  • #6

I am still missing sometime. It did not convert the .xlsm file to xlsx format.

Code:

ActiveWorkbook.SaveAs ("C:Userspnix4DesktopHireTerm  " & Format(Now(), "DD-MMM-YYYY") & ".xlsx")

  • #7

you need to set the format parameter… gallen posted what to do above ;)

Legacy 319654

Guest


  • #8

I get an error message «the following feature can not be saved as a macro free workbook»
ActiveWorkbook.SaveAs «C:Userspnix4DesktopaaaaaHireTerm » & Format(Now(), «DD-MMM-YYYY»), xlOpenXMLWorkbook

This code makes another Macro file
ActiveWorkbook.SaveAs «C:Userspnix4DesktopaaaaaHireTerm » & Format(Now(), «DD-MMM-YYYY»), xlOpenXMLWorkbookMacroEnabled

For some reason I can not get it to convert from macro to non macro file.

Last edited by a moderator: May 17, 2017

  • #9

that is not an error but a notification I believe… try disabling notifications so excel performs the default action to the notification, i think it is just a warning that you will lose vba code

Last edited: May 17, 2017

Legacy 319654

Guest


  • #10

Thank all for the help

Sub ssFile()

Application.DisplayAlerts = False

ActiveWorkbook.SaveAs «C:Userspnix4DesktopjjjjjjjHireTerm » & Format(Now(), «DD-MMM-YYYY»), xlOpenXMLWorkbook

Application.DisplayAlerts = True

End Sub

 

Excel-Starter

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

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

#1

29.10.2015 14:26:09

Добрый день.

Имеется следующий (записанный средствами Excel) макрос:

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

В нем записаны «проходы» для первых двух строк таблицы, по которым он работает (выполняет одни и те же действия для каждой из заданных строк). Как оптимизировать его таким образом, чтоб скрипт был по-короче (например с использованием FOR TO для подстановки номеров строк (отмечены красным)) и «обрабатывал» все строки, дойдя до первой пустой строки (строки постоянно дополняются, сейчас первыми пустыми явяются строки A270:F270).
(действия для всех строк одинаковы, единственное что меняется, если вбивать макрос вручную, это отмеченные красным ячейки (т.е. A1:F1 / A2:F2 / A3:F3 и т.п. и  G1/G2/G3 и т.п.).

Заранее спасибо!

Изменено: Excel-Starter29.10.2015 22:17:26

 

Hugo

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

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

Для начала уберите все строки с ActiveWindow.ScrollColumn- невозможно ведь читать код!…

 

Пытливый

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

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

#3

29.10.2015 14:35:37

сначала определяем номер последней заполненной строки на листе:

Код
I=cells(rows.count,1).end(xlUp).row

потом гоняем цикл для заполненных строк

Код
For J = 1 to I
'...какие-то действия
Next J

копирование и вставку можно без использования Select
например, копируем диапазон с переменной строкой и от А до F в G

Код
For J = 1 to I
Range(cells(J, "A"), cells(J, "F").Copy Cells(J, G)
Next J

Кому решение нужно — тот пример и рисует.

 

Excel-Starter

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

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

#4

29.10.2015 15:35:07

Hugo, убрал

Пытливый, заменил:

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

выдается ошибка.

Изменено: Excel-Starter29.10.2015 16:34:57

 

Пытливый

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

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

1. На какой строке выдается ошибка?
2. Переменная для цикла j. В адресе ячеек используете J. Почему?

P.S. По-моему, гораздо проще было набросать файл-пример, описать свои хотелки и местные корифеи давно бы написали компактный макрос под ваши задачи.

Кому решение нужно — тот пример и рисует.

 

Excel-Starter

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

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

#6

29.10.2015 15:53:12

Ошибка в строке:
Range(cells(J, «A»), cells(J, «F»).Copy Cells(J, G)
Брал ее из кода в Вашем сообщении

Код
For J = 1 to I
Range(cells(J, "A"), cells(J, "F").Copy Cells(J, G)
Next J
 

Hugo

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

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

ActiveWindow.SmallScroll Down:=-30
убрать, G взять в кавычки. Для начала, дальше не вникал.

 

Пытливый

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

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

Cells(J, «G») кавычки вокруг G поставьте.

Кому решение нужно — тот пример и рисует.

 

Не помогло:
Compile Error: Expected List Separator or )

Range(cells(J, «A»), cells(J, «F»).Copy Cells(j, «G»)

 

Пытливый

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

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

я уже написал, переменная для цикла = j (или, если хотите J)
Она потом используется для адресации ячейки.
НЕЛЬЗЯ в одном месте писать j, а в другом J — для программы это РАЗНЫЕ вещи.
Range(cells(J, «A»), cells(J, «F»)).Copy Cells(J, «G»)

p.s. Файл с внятным описанием что надо сделать не хотите показать? Давно б уж все решили…

Кому решение нужно — тот пример и рисует.

 

Hugo

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

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

#11

29.10.2015 16:59:05

Цитата
Excel-Starter написал: Expected List Separator or )

пишет ведь что скобки не хватает.

 

Прикладываю упрощенный пример

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

  • primer.xlsm (13.31 КБ)

Изменено: Excel-Starter29.10.2015 17:29:57

 

Hugo
Скобку добавлял — не помогает…

 

Пытливый

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

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

в примере ОЧЕНЬ бы хорошо написать — вот есть, вот что надо, чтобы было.
А то — ну таблица. И?

Кому решение нужно — тот пример и рисует.

 

yoozhik

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

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

записанный макрос по двум строкам в итоге проставляет в столбец G количество значений, больших 50. К чему такие сложности?…может просто протянуть формулу?

 

Hugo

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

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

#16

29.10.2015 18:22:35

Цитата
Excel-Starter написал: Скобку добавлял — не помогает…

Очевидно не туда добавляли. Всем помогает, Вам не помогает…

 
Пытливый

Надо чтоб после запуска макроса подтсавлялись значения из ячеек А1-F1 в ячейки ВJ1-ВJ6 , далее получившееся в результате этого значение из ячейки BK1 копировалось в ячейку G1,
далее все повторяется со второй строкой:
после запуска макроса подтсавлялись значения из ячеек А2-F2 в ячейки ВJ1-ВJ6 , далее получившееся в результате этого значение из ячейки BK1 копировалось в ячейку G2,
и так далее, до момента, когда следующая строка оказывается пустой.

yoozhik

Это пример более простой таблицы, чем исходная: в исходной более сложные связи и формулы, которые на смысл макроса не влияют.

 

Пытливый

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

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

#18

29.10.2015 18:53:59

Не обязательно переписывать все в другой диапазон, там считать количество значений = 0 и потом переписывать результат в нужное место.
Можно все делать в макросе:

Код
Sub t58()
Dim lngI As Long
    For lngI = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'от первой строки до последней заполненной
'в ячейку G соответствующей строки пишем результат работы функции СЧЕТЕСЛИ соответствующего диапазона и условия.
        Range("G" & lngI) = Application.WorksheetFunction.CountIf(Range("A" & lngI & ":F" & lngI), 0) 
    Next lngI
End Sub

Кому решение нужно — тот пример и рисует.

 
Пытливый

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

 

Пытливый

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

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

#20

29.10.2015 19:11:39

Ок. :)

Код
Sub t59()
Dim lngI As Long
    For lngI = 1 To Cells(Rows.Count, 1).End(xlUp).Row
'транспонируем значение диапазона А:F соответствующей строки
        Range("bj1:bj6").FormulaArray = "=TRANSPOSE(A" & lngI & ":F" & lngI & ")"
'тащим результат в G соответствующей строки
        Range("G" & lngI) = Range("BK1")
    Next lngI
End Sub

Изменено: Пытливый29.10.2015 19:11:52

Кому решение нужно — тот пример и рисует.

 

Excel-Starter

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

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

#21

29.10.2015 19:56:15

Пытливый

Благодарю! Выглядет — оптимально, но не срабатывает. Прерывается на строке

Код
Range("G" & lngI) = Range("BK1")

Прерывается на заполнении то 48, то 40, то 34, то 15 строки (каждый раз по-разному)

Изменено: Excel-Starter29.10.2015 20:42:56

 

Вот версия таблицы, более похожая на финальную. Скрипт доходит до 15-60 строки и прерывается…

 

Excel-Starter

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

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

#23

30.10.2015 12:07:31

Довел код до такого вида: все равно не работает, где-то ошибка.

Код
Sub Makro()
    Dim i As Long
    For i = 1 To Range("AM1")
        Range("bj1:bj6").FormulaArray = "=TRANSPOSE(A" & i & ":F" & i & ")"
        Range("G" & i) = Range("BK1")
    Next i
End Sub

Изменено: Excel-Starter30.10.2015 14:48:24

 

Пытливый

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

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

For i = 1 To Range(«AM1»)
Что в этой строке написано? От i = 1 до значения, содержащегося в AM1
Зачем? Бегать по циклу ж надо от первой строки до последней заполненной?

p.s. В примере с таблицей «более похожей на финальную» — 15 раз запускал макрос — все корректно отрабатывает, заполняет G до 260 строки без прерываний.
Может не в макросе проблема?

Изменено: Пытливый30.10.2015 14:52:45

Кому решение нужно — тот пример и рисует.

 
Пытливый

У меня вылазит ошибка

В финальной таблице каждый следующий подход требуется нажимать «Continue» для продолжения исполнения скрипта: для каждой строчки.

(B AM1 — ячейке находится номер последней заполненной строки)

Изменено: Excel-Starter30.10.2015 14:57:39

 

Пытливый

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

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

А вычисления на листе у вас в автоматическом режиме стоят?

Хотя… если нет — ну и что? тупо бы непересчитанные значения бы заполнялись…

Хм… даже не знаю пока в чем может быть причина…. думаю….

О!!!!!
А какие еще макросы есть в книге/на листе? Типа на изменение значения на листе?

Изменено: Пытливый30.10.2015 15:30:50

Кому решение нужно — тот пример и рисует.

 

Excel-Starter

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

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

#27

30.10.2015 15:44:54

Пытливый

, больше никаких, без макросов.

  1. 04-03-2017, 05:01 PM


    #1

    drummo2a is offline


    Registered User


    MsgBox compile syntax error or Expected: list separator or )

    I have a simple, I thought, piece of code to check whether recently pasted cells have red font or not.

    It was working well until I tried to add an error check to alert me that no cells were red.

    Here is the code. The variable NoRed is properly defined up at the top.
    After I paste in my text I move things around then check to see if any of 5 cells have red font.

    The MsgBox line keeps giving me either a syntax error (in its current state) or Expected: List separator or ) (if I try to add a title or anything to the msgbox)

    If ActiveCell.Offset(-10, 0).Font.Color = vbRed Then
    ActiveCell.Value = «A»
    GoTo STOPCOUNT
    ElseIf ActiveCell.Offset(-9, 0).Font.Color = vbRed Then
    ActiveCell.Value = «B»
    GoTo STOPCOUNT
    ElseIf ActiveCell.Offset(-8, 0).Font.Color = vbRed Then
    ActiveCell.Value = «C»
    GoTo STOPCOUNT
    ElseIf ActiveCell.Offset(-7, 0).Font.Color = vbRed Then
    ActiveCell.Value = «D»
    GoTo STOPCOUNT
    ElseIf ActiveCell.Offset(-6, 0).Font.Color = vbRed Then
    ActiveCell.Value = «E»
    GoTo STOPCOUNT

    Elseif NoRed = MsgBox (�No Red cells would you like to continue�?�,vbQuestion + vbYesNo)= vbNo Then
    Exit Sub
    End If


  2. 04-03-2017, 07:43 PM


    #2

    ferday is offline


    Registered User


    Re: MsgBox compile syntax error or Expected: list separator or )

    please use code tags, that’s hard to read

    your ElseIf NoRed statement makes no sense. how did you define NoRed?


  3. 04-03-2017, 09:49 PM


    #3

    drummo2a is offline


    Registered User


    Re: MsgBox compile syntax error or Expected: list separator or )

    Sorry, I am new to this, I don’t even know what you mean by code tags.

    The NoRed was defined earlier in the code (Dim NoRed as Integer).
    This is the first mention of NoRed or msgbox in the code. The previous stuff, which I did not show, is just fancy cut and past to move the pasted text into the right cells. I then test it for red font. That is where I am having my difficulties. Any help would be appreciated.

    I should add, I tried it without the NoRed and get the same error

    Elseif MsgBox (“No Red cells would you like to continue…?”,vbQuestion + vbYesNo,)= vbNo Then

    Drummo2a

    Last edited by drummo2a; 04-03-2017 at 09:53 PM.


  4. 04-04-2017, 02:12 AM


    #4

    Re: MsgBox compile syntax error or Expected: list separator or )

    Hi,

    You have smart quotes in that code- you need regular ones- and remove the trailing comma

    Don
    Please remember to mark your thread ‘Solved’ when appropriate.


  5. 04-05-2017, 02:11 PM


    #5

    drummo2a is offline


    Registered User


    Re: MsgBox compile syntax error or Expected: list separator or )

    Thanks, I pasted your line of code in and it worked great. Now I have a more questions. Where do the «smart quotes» come from? How can I tell I have them?


  6. 04-07-2017, 01:24 AM


    #6

    Re: MsgBox compile syntax error or Expected: list separator or )

    They sometimes appear if you copy code from a web site or if your code is pasted from Word.


Guys,

Thanks again, the DLookup is now working, however I am rendering a
«type mismatch» error

Here is the code:
If Me.Login_PW = DLookup(«Staff_Password», «Security_Staff»,
«[Staff_Name]= ‘» & Me.LogIn_ID & «‘») Then
Staff_Name = Me.LogIn_ID

The debugger is pointing to «Staff_Name = Me.LogIn_ID»

Me.LogIn_ID is a string

-M

Damian S wrote:
Hi Mr.Kane,

Try opening the immediate window (Ctrl-G) and typing
? DLookup(«Staff_Password», «Security_Staff», «[Staff_ID]= ‘» & Me.LogIn_ID
& «‘»)

(including the question mark), and that will let you know if the dlookup
portion is working correctly. You may need to replace the me.LogIn_ID with
forms!frmName.LogIn_ID, and ensure that you have the form open.

Damian.

:

Alright guys,

Apparently I have been working way too long on this and just overlooked

the «source» table.

I now have the correct table but am coming across the «Expected list
separator or )» error again.

Here is the current code:
If Me.Login_PW = DLookup(«Staff_Password», «Security_Staff»,
«[Staff_ID]= ‘» &Me.LogIn_ID& «‘»)

This code segment is highlighted by the debugger: &Me.LogIn_ID& «‘»)
(the double quotes, single quote, double quotes portion)

I am baffled.
-M

Mr.Kane wrote:
Damian and David,

Thank you for taking the time out to offer a solution. David’s Syntax
suggestion
DLookup(«Staff_Password», «Staff», «[Staff_ID]= Me.LogIn_ID»)

seems to have done the trick, however now I am encoutering the
following error:
Run-Time error ‘2471’
‘the object doesn’t contain the Automation object ‘Staff_Password.»

Any help would be appreciated
-M

David F Cox wrote:
It is perhaps the wrong hour of the morning to be trying to use my brain,
but:
DLookup(«Staff_Password», «Staff», «[Staff_ID]= Me.LogIn_ID»)

Hi Mr.Kane,

If login_ID is a number, you do not need the extra quotes at all… If it
is a string, try using a single quote like this:

DLookup(«Staff_Password», «Staff», «[Staff_ID]='» & Me.LogIn_ID & «‘»)

You might also want to consider checking for null in case you have no
matching Staff in the table with the entered Staff_ID. Also, just to
prevent
confusion, if you are calling it Staff_ID in the table, why not call it
Staff_ID on your form also for consistency.

Hope this helps.

Damian.

where after the equals sign is a single quote then double quote, then
after
the ampersand is a double quote, single quote, double quote.

:

I am creating a login form and keep running into the same compile
error: «Expected: List separator or )»

Here is the offending code segment:
If Me.Login_PW = DLookup(«Staff_Password», «Staff», «[Staff_ID]='»
&Me.LogIn_ID& «»‘)Then
Staff_Name = Me.LogIn_ID.Value

The highlighted segment of code are the 2 double quotes after
&Me.LogIn_ID&

I’m sure the correct syntax will be obvious after the fact but it’s
incredibly frustrating right now.

any help would be appreciated
I am willing to send anyone who can help a screenshot of the error for
your evaluation. I believe
that I have the order correct but it may help you to see the error and
the highlighted code segment.

Thank you,
Marc

Понравилась статья? Поделить с друзьями:
  • Compile error expected array vba
  • Compile error else without if vba
  • Compile error duplicate declaration in current scope
  • Compile error dayz что делать
  • Compile error dayz как исправить