VBS不允许编程

时间:2019-03-13 19:02:54

标签: vbscript

我正在做一些编程,尝试运行该错误消息。我的代码:

MsgBox ("hi")
sleep (2)
MsgBox ("you ok" vbYesNo, "how are you?")

Select Case result
    Case vbYes,
        MsgBox ("that's good!")
    Case vbNo, MsgBox ("sorry to hear that.")
End Select
  

第3行
  字符:18
  错误:预期为')'来源:Microsoft VBScript编译错误。

1 个答案:

答案 0 :(得分:2)

问题是因为错误表明您有编译问题,但是在其余示例代码中,您还有其他问题需要纠正。

  1. MsgBox()中缺少参数语法:

      

    第3行

         

    字符:18

         

    错误:预期为')'来源:Microsoft VBScript编译错误。

    是因为函数MsgBox()期望用逗号分隔参数,但是缺少"you ok"之后的参数分隔符,导致编译器引发异常。

  2. 调用Sub时不能使用括号:

    在调用不返回括号的值的过程时,会导致传递给该过程的多个参数;

      

    Microsoft VBScript编译错误:调用Sub时不能使用括号

    对此有一个警告,就是如果它只是一个参数,它将不会编译失败,但这不是因为它接受一个参数,而是因为它将方括号视为参数的一部分,而不是过程的一部分,所以< em>(埃里克·利珀特(Eric Lippert)在his blog中详细讨论了这一点);

    MsgBox("Hi") 'Will work
    

    这相当于写作;

    Call MsgBox(("Hi")) 'Note the extra brackets
    

    这可能有点令人困惑,因此当涉及多个参数时,您可能会认为这没关系;

    MsgBox("you ok", vbyesno, "how are you?") 'This will error
    

    但是,由于括号现在表示参数括号,它变得无效并引发编译错误。为避免这种情况,您可以做三件事;

    1. 删除括号

       MsgBox "you ok", vbyesno, "how are you?"
      
    2. 返回值(如果该过程可以返回值)

       result = MsgBox("you ok", vbYesNo, "how are you?")
      

      当您在下一行检查result的值时,这将是正确的选项,因为它result将包含在其中单击vbYesvbNo的结果MsgBox()函数。

    3. 使用Call语句为过程调用添加前缀

       Call MsgBox("you ok", vbYesNo, "how are you?")
      
  3. 语法错误:

      

    Microsoft VBScript编译错误:语法错误

    这归结为Case参数后的尾部逗号,只需删除逗号即可编译代码。

    Select Case result
    Case vbYes
      Call MsgBox("that's good!")
    Case vbNo
      Call MsgBox("sorry to hear that.")
    End Select
    
  4. Sleep持续时间:

    在示例代码等待0.002秒的时刻,Sleep()函数期望用毫秒而不是秒表示的值。等待2秒钟(我假设是故意的)使用;

    Call Sleep(2000)
    

有用的链接