Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot use parentheses when calling a Sub Error 800A0414 VBS

Tags:

vbscript

I am getting the 800A0414 error in lines 7 and 12 of this script:

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

I am trying to run a batch script, that starts a process, then wait until the process terminates, then run another batch script. I also do not want any command boxes being shown. If their is a easier way please let me know.

Thanks for your help

like image 345
Strong Avatar asked Feb 15 '13 19:02

Strong


3 Answers

When you enclose a procedure's argument list in parentheses, you must use the Call keyword:

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

If you omit the Call keyword, you must also drop parentheses:

CreateObject("WScript.Shell").Run "program.bat", 0, True
like image 152
Helen Avatar answered Nov 21 '22 00:11

Helen


To complete what's been said before:

When Call keyword is used to call a procedure (i.e. sub or function) the arguments must be enclosed in parentheses, except when the procedure has no arguments in which case the parentheses are optional. For example all the statements:

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

are valid, but not this one:

Call test 1

When calling a procedure without using the Call keyword, the parentheses can only be used when either the procedure has zero or one argument or the procedure has a return value (i.e. is a function) and its value is used in the same statement. For example all the statements:

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

are valid, except the third one which has more than one argument. In case it's not clear, the inner call of "test" in the last statement is valid because its return value is used as an argument to another call.

Note that whenever parentheses is used in this text, it is meant to imply the possible comma-separated values as well.

like image 34
Mohammad Amin Bandekhoda Avatar answered Nov 20 '22 22:11

Mohammad Amin Bandekhoda


Seems to me this is a VB.NET, not VBScript code. You have Shell function in VB.NET (and other methods).

Anyway, Run returns any error code returned by the program, and if you store that result in a variable, you can use parentheses in this case.

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

The rest was answered by @Helen.

like image 1
Panayot Karabakalov Avatar answered Nov 20 '22 22:11

Panayot Karabakalov