调用Sub Error 800A0414 VBS时不能使用括号

时间:2013-02-15 19:41:23

标签: vbscript

我在此脚本的第7行和第12行中收到800A0414错误:

Module Module1

  Dim p

    Sub Main()
        CreateObject("Wscript.Shell").Run("program.bat", 0, True)

        p = Process.GetProcessesByName("program")
        If p.Count > 0 Then
            WScript.Sleep(300000)
        Else
            CreateObject("Wscript.Shell").Run("program clean up.bat", 0, True)
        End If

    End Sub

    Private Function WScript() As Object
        Throw New NotImplementedException
    End Function

End Module

我正在尝试运行批处理脚本,启动进程,然后等待进程终止,然后运行另一个批处理脚本。我也不希望显示任何命令框。如果他们更容易,请告诉我。

感谢您的帮助

3 个答案:

答案 0 :(得分:48)

当您将过程的参数列表括在括号中时,您必须使用Call关键字:

Call CreateObject("WScript.Shell").Run("program.bat", 0, True)

如果省略Call关键字,则还必须删除括号:

CreateObject("WScript.Shell").Run "program.bat", 0, True

答案 1 :(得分:8)

完成之前的说法:

当使用 Call关键字来调用过程(即子或函数)时,参数必须括在括号中,除外当过程没有参数时,括号是可选的。例如所有陈述:

Call test()
Call test
Call test(1,2)

是有效的,但不是这个:

Call test 1

在不使用Call关键字的情况下调用过程时,如果过程具有零个或一个参数或过程具有返回值,则可以使用 括号ie是函数),其值在相同的语句中使用。例如所有陈述:

test()
test(1)
test(1,2)
a = test
a = test(1,2)
a = test(test(1,2),2)

有效,但第三个参数有多个参数。如果不清楚,最后一个语句中“test”的内部调用是有效的,因为它的返回值被用作另一个调用的参数。

请注意,无论何时在本文中使用括号,都意味着暗示可能的逗号分隔值。

答案 2 :(得分:0)

对我来说这是一个VB.NET,而不是VBScript代码。 你在VB.NET(和其他方法)中有Shell function

无论如何,Run会返回程序返回的任何错误代码,如果你 存储导致变量的存储,在这种情况下可以使用括号。

Dim lResult As Long
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True)

其余的由@Helen回答。