如果 VBScript 语句结构违反了一个或多个 VBScript 脚本语言语法规则,就会产生 VBScript 语法错误。VBScript 语法错误通常在执行程序前,编译程序时产生。
十进制
十六进制
说明
1001
800A03E9
1002
800A03EA
1003
800A03EB
缺少 ':'
1005
800A03ED
1006
800A03EE
1007
800A03EF
缺少 ']'
1010
800A03F2
1011
800A03F3
1012
800A03F4
1013
800A03F5
1014
800A03F6
1015
800A03F7
1016
800A03F8
1017
800A03F9
1018
800A03FA
1019
800A03FB
1020
800A03FC
1021
800A03FD
1022
800A03FE
1023
800A03FF
1024
800A0400
1025
800A0401
1026
800A0402
1027
800A0403
1028
800A0404
1029
800A0405
1030
800A0406
1031
800A0407
1032
800A0408
1033
800A0409
1034
800A040A
未结束的注释
1037
800A040D
1038
800A040E
1039
800A040F
1040
800A0410
1041
800A0411
1042
800A0412
1043
800A0413
不能赋给非Byval参数
1044
800A0414
1045
800A0415
1046
800A0416
1047
800A0417
1048
800A0418
1049
800A0419
1050
800A041A
1051
800A041B
1052
800A041C
1053
800A041D
1054
800A041E
1055
800A041F
1056
800A0420
只能在 'Property' 或 'Function' 或 'Sub' 上指定 'Default'
1057
800A0421
说明 'Default' 必须同时说明 'Public'
1058
800A0422
只能在 Property Get 中指定 'Default'
内存不足
分配与该计算机有效内存一样多的内存。这可能是一个动态分配数组增长得太大,或者是对象实例数目过多。
要纠正该错误
使用Erase语句来重新分配动态数组的储存空间。
使用ReDim语句来重新分配储存空间。
关闭任何已经打开、不必需的应用程序,文件或者源文件。
语法错误
创建的语句中违反了VBScript的语法规则。
要纠正该错误
检查两遍表达式中元素的数目。
寻找间接的括号。
需要 '('
当创建过程说明时未包含开括号“(”,
Sub foo x // x需要使用圆括号括起来。 End Sub
或使用redim 语句。
Redim x // x需要使用圆括号括起来。
要纠正该错误
添加左(开)括号“(”。
需要 ')'
试图封装一套括号中的表达式,但未包含闭括号“)”。必须用一套开括号和闭括号封装一些表达式。
要纠正该错误
给要求值的表达式添加右(闭)括号“)”。
需要标识符
使用VBScript 保留词作为变量名称。
要纠正该错误
使用其它名称(一个不是VBScript保留词的名称)。
以[ ]封装保留词。
需要 '='
使用Set 语句,但未包含=。
要纠正该错误
使用Set 语句的完整语法。
需要 'If'
创建了一个If...Then...Else 块,但未正常结束块。块语句If 必须为一行的第一个语句,且必须以End If 结束。下面演示了一个If...Then...Else块 的正确结构。
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If
要纠正该错误
检查块If 语句是否以End 语句。如果是的话,将它改成End If 语句。
需要 'To'
创建一个For...Next 循环,但没有在第一行中包含关键词To。一个For...Next循环 的第一行必须包含关键词To 。下面演示了一个For...Next 循环的正确结构。
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next
要纠正该错误
确保For...Next循环包含了所有必须的部分。
需要 'End'
创建结构但未正常结束。下表列出了必须以End语句结束的结构。
结构
结束语句
Sub
End Sub
Function
End Function
If
End If
Class
End Class
With
End With
Select
End Select
要纠正该错误
以End Sub语句结束一个Sub过程。
以End Function 结束一个Function过程。
以End If 语句结束一个If 语句。
以End Class 语句结束一个Class语句。
以End With 语句结束一个With语句。
以End Select 语句结束一个Select语句。
需要 'Function'
创建一个Function过程,但是以关键词End结束, 而不是以End Function 语句结束。一个Function过程必须包含结束语句End Function 。
要纠正该错误
以语句End Function 结束Function过程。
需要 'Sub'
创建了一个Sub 过程,但是使用关键字End结束而不是使用End Sub 语句终止。一个Sub过程必须包含一个End Sub终止语句。
要纠正该错误
使用End Sub 语句终止Sub 过程。
需要 'Then'
创建了一个If...Then...Else结束,但在第一行中为包含关键字Then。下面的代码演示了If...Then...Else 结构的正确使用。
If condition Then statements [Else elsestatements ]
或者可以使用块形式语法:
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If
要纠正该错误
确保 If...Then...Else结构包含了所有必须的部分。
需要 'Wend'
创建了一个While...Wend 循环,但是没有正确终止循环。一个 While...Wend 循环必须使用语句Wend 来终止。下面演示了一个While...Wend 循环的正确结构。
While condition
Version [statements]
Wend
要纠正该错误
确保While...Wend循环包含了所有必须的部分。
需要 'Loop'
创建了一个Do 循环结构,但未正常中断循环。Do 循环结构与Loop 语句相关联结束。下面演示了Do 循环结构的正确使用。
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
或者可以使用下面的语法:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
要纠正该错误
确保Do循环结构包含了所有必须的部分。
需要 'Next'
创建了一个For...Next 循环结构,但未正常结束循环。一个For...Next 循环结构必须以一个Next语句结束。下面演示了一个For...Next 循环结构的正确结构。
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next
要纠正该错误
确保For...Next循环结构包含了所有必须的部分。
需要 'Case'
创建Select...End Select 构造,但未包含任何Case语句。下面演示了Select...End Select 构造的正确使用方法。
Select Case testexpression
[Case expressionlist-n [statements-n]] . . .
[Case Else expressionlist-n [elsestatements-n]]
End Select
要纠正该错误
确保Select...End Select 构造包含所有必须的部分。
需要 'Select'
创建了一个Select...End Select 结构,但未包含结束语句End Select 。下面演示了Select...End Select 结构的正确使用方法。
Select Case testexpression
[Case expressionlist-n [statements-n]] . . .
[Case Else expressionlist-n [elsestatements-n]]
End Select
要纠正该错误
确保Select...End Select结构包含了所有必须的部分
需要表达式
创建一个Select...End Select结构,但包含一个Case分句。Case Else语句(失败的情况)必须在它自己那一行出现。下面演示了Select...End Select 结构的正确使用。
Select Case testexpression
[Case expressionlist-n [statements-n]] . . .
[Case Else expressionlist-n
[elsestatements-n]]
End Select
要纠正该错误
为Case Else 语句另起一行。
需要语句
作为参数传递给Execute语句的字符串无法被解析为一个语句。Execute语句不能被用来动态执行VBScript代码。例如,考虑如下的 VBScript代码。
Execute "msgbox 1" '因为msgbox是一个语句,所以有效。
Execute "5*4" '由于5*4无法被解释为一个语句所以失败。
不仅仅是Execute和Eval ,在任何需要一个语句的脚本代码的编译过程中也产生Expected statement错误。例如,如下代码在Internet Explorer 中造成这个错误,
<html>
<script language=vbscript>
5*4
</script>
</html>
注意这里有两个在VBScript中不同且无关的语句,
编译并执行不工作语句的Execute语句,
Execute 方法.
要纠正该错误
确保传递给Execute 语句的字符串为一个语句。
如果要求值的字符串为一个表达式,使用Eval。
需要语句的结束
在语句结尾外出现文字。
要纠正该错误
移去额外的文字。
如果要注释代码行,在语句的结尾处插入单引号"'"。
需要整数常数
试图在Dim 语句中使用非常数创建一个数组。在VBScript中,Dim 语句中大小值必须为一个常数。例如,
Dim a(10) ' 有效。
Dim a(x) ' 无效。
Dim a(1=2) ' 无效
要纠正该错误
使用ReDim 语句
需要 'While' 或 'Until'
创建了一个Do循环,但是未包含相关的While 或 Until 关键词。一个Do 循环的测试条件需要在测试条件语句中使用一个While或Until 关键词。下面演示 一个Do 循环的正确结构。
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
或者可以使用语法:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
要纠正该错误
确保Do循环包含了所有必须的部分。
需要 'While'、'Until' 或语句结束
创建了一个Do循环,但是未包含相关的关键词While 或 Until。一个Do 循环的测试条件需要在测试条件语句中使用一个While或Until 关键词。下面演示了 一个Do 循环的正确结构。
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
Or, you can use this syntax:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
要纠正该错误
确保Do循环包含了所有必须的部分。
使用关键字While 或 Until来结束Do循环。loop with either the While or Until keywords。
需要 'With'
创建了一个With块,但是以关键词End而不是语句End With 结束。一个 With 块必须使用一个End With 语句结束。下面演示了With块的正确组成。
With object
statements
End With
要纠正该错误
如果使用关键词End 结束一个With块,将它改成End With语句。
确保With控制结构了所有必须的部分。
标识符太长
创建了一个包含态多字符的变量或函数名称。限制为255个字符。
要纠正该错误
选择一个较短的名称。
无效数字
表达式的一个值太大或超出范围。
要纠正该错误
使用较小的值。
无效字符
在一个表达式中试图使用双字节字符集(DBCS)或其他不被支持的字符。
要纠正该错误
将不被支持的字符封装在方括号[]中。
未终止字符串常数
没有用封闭的引号来结束字符串常数。字符串常数必须用一对引号来封闭。
要纠正该错误
在字符串尾部加上封闭的引号。
无效使用关键词 'Me'
试图使用Set给标识符 Me赋值。Me是一个被保留的标识符,且不能被设定。
要纠正该错误
将变量的名称改成与Me不同。
'loop' 没有 'do'
创建了一个Do 循环,但未正确地建立循环。Do 循环以Do语句开始。下面演示了一个Do 循环的正确结构。
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
或者可以使用这个语法:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
要纠正该错误
在不删除Loop 语句的情况下可能试图删除一个Do 控制结构。
确保Do循环包含了所有必须的部分。
无效 'exit' 语句
在以下程序控制结构之一中使用了Exit 语句:
With 语句。
If...Then...Else语句。
Select Case语句。
仅在如下结构中可以合法使用Exit 语句来退出:
Do...While 循环(Exit Do)。
For...Next 循环(Exit For)。
For Each...Next 循环(Exit For)。
Function 过程(Exit Function)。
Sub 过程(Exit Sub)。
要纠正该错误
可能不适当地使用了Exit If, Exit With,或Exit Select。
不要和If, With,Select 语句一起使用Exit。
无效 'for' 循环控制变量
创建了一个For...Next循环。换句话说,可能在For...Next中使用了一个非法的控制变量。下面的代码演示了一个For...Next 循环的正确结构。
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next
要纠正该错误
修改For...Next 循环的控制变量,使其在外循环的范围内唯一。
名称重定义
声明了一个在脚本其他地方已经使用的名称。
要纠正该错误
改变标识符名称使其在脚本的全局范围内唯一。
必须为行的第一个语句
代码的多语句行包含了一个If...Then...Else 语句, 但If...Then...Else 语句不是改行的第一个语句。If...Then...Else 语句必须为行的第一个语句。
要纠正该错误
将If 或 Else语句移动到新的一行。
调用 Sub 时不能使用圆括号
未使用Call调用子程序,但是使用了圆括号()。当不使用Call 语句调用子程序时,不要使用圆括号。
要纠正该错误
在调用子程序的地方移去圆括号。
改用Call 语句调用子程序。
需要文字常数
声明常数,但是赋予其变化的表达式(可以变化的值)。常数不能包含运行时代码。
要纠正该错误
当声明常数时不使用表达式。
需要 'In'
创建一个For Each...Next 块,但在第一行未包括关键词In 。下面演示了For Each...Next 块的正确结构。
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
要纠正该错误
确保For Each...Next 块包含了所有必须的部分。
需要 'Class'
创建一个Class 过程,但是以关键词End结束,而不是使用语句End Class。通常使用End Class语句结束Class 过程。
要纠正该错误
使用End Class语句结束Class 过程。
必须在一个类的内部定义
创建了一个 Property 过程(Property Let, Property Set,或 Property Get), 但是在 Class 定义的外部进行了定义。只能在同一类里面创建 Property 过程。
要纠正该错误
确保所有的 Property Let,Property Set 和 Property Gets 在一个 Class 定义里面定义了。
在属性声明中需要 Let或 Set 或 Get
创建了一个Property Let, Property Set,或 Property Get 语句,但未包含关键词Let, Set, 或 Get。Property 语句后面必须带Let,Set,或 Get。
要纠正该错误
确保Property 语句后面跟Let, Set, 或Get。
需要 'Property'
创建了一个Property 过程(Property Let,Property Set,或Property Get), 但未使用End Property 语句结束过程。Property过程必须以End Property语句结束。
要纠正该错误
确保 Property过程以End Property语句结束。
参数数目必须与属性说明一致
所说明的参数数目太少了。当使用Property Let 或 Property Set,参数数目必须比相应的Property Get 返回的数字大1。
要纠正该错误
确保Property Let 和 Property Set 至少比由Property Get.返回的参数数目多1。
在类中不能有多个缺省的属性/方法
在类定义中标记了多于一个的缺省属性或方法。在类中只能有一个缺省的属性和方法。
要纠正该错误
确保该类只有一个缺省的属性和方法。
类初始化或终止不能带参数
类定义带有Class_Initialize事件或Class_Terminate 事件。这些过程有一个或更多的参数。不要给这些过程指定参数。
要纠正该错误
从类定义中移去参数。
Property Set 或 Let 至少应该有一个参数
说明了一个没有参数的类的 Set 或 Let 句柄的访问者。
要纠正该错误
增加一个参数给属性访问者。
不需要 'Next'
创建了一个For...Next 或者For Each...Next 构造,但没有包含For语句。例如,在试图去掉For...Next构造时保留了Next语句。下面演示了For...Next构造的正确用法。
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next
要纠正该错误
加上For语句 (循环控制语句)。
去掉多余的Next语句。
只能在 Property Get 中指定 'Default'
对Property Let 或 Property Set 使用了保留字 Default。只能对 Property Get 指定保留字 Default 。
要纠正该错误
只对 Property Get 指定保留字 Default 。