0

我是 VBS 编码的新手,并且一直在我的 VBScript 中收到 1024 Expect Statement Error。如果有人能指出我的错误在哪里,我将不胜感激。

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 中将过滤部分作为宏运行时,它可以工作,但是当我在脚本中实现它时,它会抛出一个错误。

4

4 回答 4

2

在 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

于 2018-04-16T09:33:37.243 回答
1

感谢您的回答并指出我的错误。我的最终解决方案如下

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

我相信我的主要问题是我在第三行有标题,当我没有指定脚本在第一行搜索过滤选项时。

再次感谢您的宝贵时间!

于 2018-04-16T11:24:42.810 回答
1

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 和其他常量。

于 2018-04-16T09:26:19.320 回答
1

VBScript,正如其他答案所述,不处理命名参数。

因此它不知道你的意思是什么Worksheets。它们需要完全限定为属于父objWorkbook对象的引用。

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

会工作得很好。xlAnd如果要使用命名参数,您需要将任何和所有 excel 命名值(例如)替换为等效的枚举值,或者将它们声明为常量并将值设置为与枚举值匹配。

于 2018-04-16T11:18:50.907 回答