vbscript|错误|语法 如果 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 |
内存不足
分配与该计算机有效内存一样多的内存。这可能是一个动态分配数组增长得太大,或者是对象实例数目过多。
要纠正该错误
- 使用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 。
下一篇IIS 错误代码汇总