分享

ASP:VBScript语法错误

 aaie_ 2011-10-31
如果 VBScript 语句结构违反了一个或多个 VBScript 脚本语言语法规则,就会产生 VBScript 语法错误。VBScript 语法错误通常在执行程序前,编译程序时产生。
十进制 十六进制 说 明
1001 800A03E9 内存不足
1002 800A03EA 语法错误
1003 800A03EB 缺少 ':'
1005 800A03ED 需要 '('
1006 800A03EE 需要 ')'
1007 800A03EF 缺少 ']'
1010 800A03F2 需要标识符
1011 800A03F3 需要 '='
1012 800A03F4 需要 'If'
1013 800A03F5 需要 'To'
1014 800A03F6 需要 'End'
1015 800A03F7 需要 'Function'
1016 800A03F8 需要 'Sub'
1017 800A03F9 需要 'Then'
1018 800A03FA 需要 'Wend'
1019 800A03FB 需要 'Loop'
1020 800A03FC 需要 'Next'
1021 800A03FD 需要 'Case'
1022 800A03FE 需要 'Select'
1023 800A03FF 需要表达式
1024 800A0400 需要语句
1025 800A0401 需要语句的结束
1026 800A0402 需要整数常数
1027 800A0403 需要 'While' 或 'Until'
1028 800A0404 需要 'While,'、'Until,' 或语句未结束
1029 800A0405 需要 'With'
1030 800A0406 标识符太长
1031 800A0407 无效的数字
1032 800A0408 无效的字符
1033 800A0409 未结束的串常量
1034 800A040A 未结束的注释
1037 800A040D 无效使用关键字 'Me'
1038 800A040E 'loop' 没有 'do'
1039 800A040F 无效 'exit' 语句
1040 800A0410 无效 'for' 循环控制变量
1041 800A0411 名称重定义
1042 800A0412 必须为行的第一个语句
1043 800A0413 不能赋给非Byval参数
1044 800A0414 调用 Sub 时不能使用圆括号
1045 800A0415 需要文字常数
1046 800A0416 需要 'In'
1047 800A0417 需要 'Class'
1048 800A0418 必须在一个类的内部定义
1049 800A0419 在属性声明中需要 Let , Set 或 Get
1050 800A041A 需要 'Property'
1051 800A041B 参数数目必须与属性说明一致
1052 800A041C 在类中不能有多个缺省的属性/方法
1053 800A041D 类初始化或终止不能带参数
1054 800A041E Property Let 或 Set 至少应该有一个参数
1055 800A041F 不需要的 'Next'
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无法被解释为一个语句所以失败。

不仅仅是ExecuteEval ,在任何需要一个语句的脚本代码的编译过程中也产生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 循环的测试条件需要在测试条件语句中使用一个WhileUntil 关键词。下面演示 一个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 循环的测试条件需要在测试条件语句中使用一个WhileUntil 关键词。下面演示了 一个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 IfExit With,或Exit Select
  • 不要和IfWithSelect 语句一起使用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 语句必须为行的第一个语句。

要纠正该错误

  • IfElse语句移动到新的一行。

调用 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 LetProperty Set,或 Property Get), 但是在 Class 定义的外部进行了定义。只能在同一类里面创建 Property 过程。

要纠正该错误

  • 确保所有的 Property LetProperty Set Property Gets 在一个 Class 定义里面定义了。

在属性声明中需要 Let或 Set 或 Get

创建了一个Property LetProperty Set,或 Property Get 语句,但未包含关键词Let, Set, 或 GetProperty 语句后面必须带LetSet,或 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 至少应该有一个参数

说明了一个没有参数的类的 SetLet 句柄的访问者。

要纠正该错误

  • 增加一个参数给属性访问者。

不需要 '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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多