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 FunctionThank you in advance!
-
Edited by
Friday, May 26, 2017 10:26 PM
-
Edited by
Answers
-
Function ABCDEFG(Number1 As Integer, Name1 As String)
….
Select Case Number1
Case 79001Hi 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
-
Marked as answer by
-
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
-
Marked as answer by
-
#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 |
#1 29.10.2015 14:26:09 Добрый день. Имеется следующий (записанный средствами Excel) макрос:
В нем записаны «проходы» для первых двух строк таблицы, по которым он работает (выполняет одни и те же действия для каждой из заданных строк). Как оптимизировать его таким образом, чтоб скрипт был по-короче (например с использованием FOR TO для подстановки номеров строк (отмечены красным)) и «обрабатывал» все строки, дойдя до первой пустой строки (строки постоянно дополняются, сейчас первыми пустыми явяются строки A270:F270). Заранее спасибо! Изменено: Excel-Starter — 29.10.2015 22:17:26 |
|
Hugo Пользователь Сообщений: 23134 |
Для начала уберите все строки с ActiveWindow.ScrollColumn- невозможно ведь читать код!… |
Пытливый Пользователь Сообщений: 4482 |
#3 29.10.2015 14:35:37 сначала определяем номер последней заполненной строки на листе:
потом гоняем цикл для заполненных строк
копирование и вставку можно без использования Select
Кому решение нужно — тот пример и рисует. |
||||||
Excel-Starter Пользователь Сообщений: 33 |
#4 29.10.2015 15:35:07 Hugo, убрал Пытливый, заменил:
выдается ошибка. Изменено: Excel-Starter — 29.10.2015 16:34:57 |
|
Пытливый Пользователь Сообщений: 4482 |
1. На какой строке выдается ошибка? P.S. По-моему, гораздо проще было набросать файл-пример, описать свои хотелки и местные корифеи давно бы написали компактный макрос под ваши задачи. Кому решение нужно — тот пример и рисует. |
Excel-Starter Пользователь Сообщений: 33 |
#6 29.10.2015 15:53:12 Ошибка в строке:
|
||
Hugo Пользователь Сообщений: 23134 |
ActiveWindow.SmallScroll Down:=-30 |
Пытливый Пользователь Сообщений: 4482 |
Cells(J, «G») кавычки вокруг G поставьте. Кому решение нужно — тот пример и рисует. |
Не помогло: Range(cells(J, «A»), cells(J, «F»).Copy Cells(j, «G») |
|
Пытливый Пользователь Сообщений: 4482 |
я уже написал, переменная для цикла = j (или, если хотите J) p.s. Файл с внятным описанием что надо сделать не хотите показать? Давно б уж все решили… Кому решение нужно — тот пример и рисует. |
Hugo Пользователь Сообщений: 23134 |
#11 29.10.2015 16:59:05
пишет ведь что скобки не хватает. |
||
Прикладываю упрощенный пример Прикрепленные файлы
Изменено: Excel-Starter — 29.10.2015 17:29:57 |
|
Hugo |
|
Пытливый Пользователь Сообщений: 4482 |
в примере ОЧЕНЬ бы хорошо написать — вот есть, вот что надо, чтобы было. Кому решение нужно — тот пример и рисует. |
yoozhik Пользователь Сообщений: 239 |
записанный макрос по двум строкам в итоге проставляет в столбец G количество значений, больших 50. К чему такие сложности?…может просто протянуть формулу? |
Hugo Пользователь Сообщений: 23134 |
#16 29.10.2015 18:22:35
Очевидно не туда добавляли. Всем помогает, Вам не помогает… |
||
Пытливый
Надо чтоб после запуска макроса подтсавлялись значения из ячеек А1-F1 в ячейки ВJ1-ВJ6 , далее получившееся в результате этого значение из ячейки BK1 копировалось в ячейку G1, yoozhik Это пример более простой таблицы, чем исходная: в исходной более сложные связи и формулы, которые на смысл макроса не влияют. |
|
Пытливый Пользователь Сообщений: 4482 |
#18 29.10.2015 18:53:59 Не обязательно переписывать все в другой диапазон, там считать количество значений = 0 и потом переписывать результат в нужное место.
Кому решение нужно — тот пример и рисует. |
||
Пытливый
В исходной таблице такое простое решение не годится, там обязательно нужно переписывать значения, иначе не посчитается результат в ячейке BK1 |
|
Пытливый Пользователь Сообщений: 4482 |
#20 29.10.2015 19:11:39 Ок.
Изменено: Пытливый — 29.10.2015 19:11:52 Кому решение нужно — тот пример и рисует. |
||
Excel-Starter Пользователь Сообщений: 33 |
#21 29.10.2015 19:56:15 Пытливый
Благодарю! Выглядет — оптимально, но не срабатывает. Прерывается на строке
Прерывается на заполнении то 48, то 40, то 34, то 15 строки (каждый раз по-разному) Изменено: Excel-Starter — 29.10.2015 20:42:56 |
||
Вот версия таблицы, более похожая на финальную. Скрипт доходит до 15-60 строки и прерывается… |
|
Excel-Starter Пользователь Сообщений: 33 |
#23 30.10.2015 12:07:31 Довел код до такого вида: все равно не работает, где-то ошибка.
Изменено: Excel-Starter — 30.10.2015 14:48:24 |
||
Пытливый Пользователь Сообщений: 4482 |
For i = 1 To Range(«AM1») p.s. В примере с таблицей «более похожей на финальную» — 15 раз запускал макрос — все корректно отрабатывает, заполняет G до 260 строки без прерываний. Изменено: Пытливый — 30.10.2015 14:52:45 Кому решение нужно — тот пример и рисует. |
Пытливый
У меня вылазит ошибка В финальной таблице каждый следующий подход требуется нажимать «Continue» для продолжения исполнения скрипта: для каждой строчки. (B AM1 — ячейке находится номер последней заполненной строки) Изменено: Excel-Starter — 30.10.2015 14:57:39 |
|
Пытливый Пользователь Сообщений: 4482 |
А вычисления на листе у вас в автоматическом режиме стоят? Хотя… если нет — ну и что? тупо бы непересчитанные значения бы заполнялись… Хм… даже не знаю пока в чем может быть причина…. думаю…. О!!!!! Изменено: Пытливый — 30.10.2015 15:30:50 Кому решение нужно — тот пример и рисует. |
Excel-Starter Пользователь Сообщений: 33 |
#27 30.10.2015 15:44:54 Пытливый
, больше никаких, без макросов. |
-
04-03-2017, 05:01 PM
#1
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 STOPCOUNTElseif NoRed = MsgBox (�No Red cells would you like to continue�?�,vbQuestion + vbYesNo)= vbNo Then
Exit Sub
End If
-
04-03-2017, 07:43 PM
#2
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?
-
04-03-2017, 09:49 PM
#3
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.
-
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.
-
04-05-2017, 02:11 PM
#5
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?
-
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