Использование сценария VBS в AAE и получение заявления об ожидании 1024

Я новичок в кодировании на VBS и все время получаю 1024 Expect Statement Error в своем VBScript. Если бы кто-нибудь мог указать мне, где ошибка, я был бы благодарен.

Dim Path
Dim BeginDate
Dim EndDate
Path = WScript.Arguments.Item(0)
BeginDate = WScript.Arguments.Item(1)
EndDate = WScript.Arguments.Item(2)
Set objExcel = CreateObject("Excel.Application")
Set objWorkBook = objExcel.Workbooks.Open(Path)
objExcel.Visible = True
Worksheets("PO Buy Update").Range("H3").AutoFilter Field:=8, Criteria1:="<>"
Worksheets("PO Buy Update").Range("Q3").AutoFilter Field:=17, Criteria1:="<>"
Worksheets("PO Buy Update").Range("P3").AutoFilter Field:=16, Criteria1:=">=" & BeginDate, Operator:=xlAnd, Criteria2:="<=" & EndDate

До части фильтрации все идет правильно. Когда я пытаюсь запустить фильтрующую часть как макрос в Excel, он работает, но когда я реализую его в скрипте, он выдает мне ошибку.


person Piotr    schedule 16.04.2018    source источник


Ответы (4)


В VBScript вам не нужно упоминать имя параметра при вызове функции/метода. Вам просто нужно передать значения. Имена параметров требуются в excel-vba, а не в VBScript.

Итак, попробуйте переиграть,

Worksheets("PO Buy Update").Range("H3").AutoFilter Field:=8, Criteria1:="<>"
Worksheets("PO Buy Update").Range("Q3").AutoFilter Field:=17, Criteria1:="<>"
Worksheets("PO Buy Update").Range("P3").AutoFilter Field:=16, Criteria1:=">=" & BeginDate, Operator:=xlAnd, Criteria2:="<=" & EndDate

с

Worksheets("PO Buy Update").Range("H3").AutoFilter 8,"<>"
Worksheets("PO Buy Update").Range("Q3").AutoFilter 17,"<>"
Worksheets("PO Buy Update").Range("P3").AutoFilter 16,">=" & BeginDate,1,"<=" & EndDate

Ссылка на автофильтр Метод

Ссылка на перечисляемую константу xlAnd

person Gurmanjot Singh    schedule 16.04.2018
comment
Как я и предполагал, ‹Worksheets(PO Buy Update).Range(H3).AutoFilter 8,‹›› эта строка должна выбрасывать все пустые ячейки из области действия, но я получаю ошибку несоответствия типов. - person Piotr; 16.04.2018

VBScript не может обрабатывать именованные параметры. Измените последние строки на

Worksheets("PO Buy Update").Range("H3").AutoFilter 8, "<>"
Worksheets("PO Buy Update").Range("Q3").AutoFilter 17, "<>"
Worksheets("PO Buy Update").Range("P3").AutoFilter 16, ">=" & BeginDate, xlAnd, "<=" & EndDate

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

person Sam    schedule 16.04.2018

VBScript, как указано в других ответах, не обрабатывает именованные параметры.

Поэтому он не знает, что вы подразумеваете под Worksheets. Они должны быть полностью квалифицированы как ссылки, принадлежащие родительскому объекту objWorkbook.

objWorkbook.Worksheets("PO Buy Update").Range("H3").AutoFilter 8, "<>"

будет работать нормально. Вам нужно будет заменить все без исключения именованные значения Excel (например, xlAnd) эквивалентным перечисляемым значением или объявить их как константы и установить значение, соответствующее перечисляемому значению, если вы хотите использовать именованный параметр.

person Dave    schedule 16.04.2018

Спасибо за ваши ответы и указание на мои ошибки. Мое окончательное решение ниже

Dim Path
Dim BeginDate
Dim EndDate
Path = WScript.Arguments.Item(0)
BeginDate = WScript.Arguments.Item(1) 
EndDate = WScript.Arguments.Item(2) 
Set objExcel = CreateObject("Excel.Application")
Set objWorkBook = objExcel.Workbooks.Open(Path)
Set c=objWorkBook.Worksheets("PO Buy Update") // Attached WorkbookSheet(name) into variable and then specified which row, column is a header 
objExcel.Visible = True
c.cells(3,8).AutoFilter 8, "<>"           
c.cells(3,17).AutoFilter 17, "<>"
c.cells(3,16).AutoFilter 16, ">=" & BeginDate, 1, "<=" & EndDate

Я считаю, что моя главная проблема заключалась в том, что у меня есть заголовок в третьей строке, и когда я не указал, что Script искал параметр фильтрации в первой строке.

Еще раз спасибо за ваше время!

person Piotr    schedule 16.04.2018