Cannot use parentheses when calling a Sub Error 800A0414 VBS

后端 未结 3 1512
既然无缘
既然无缘 2020-11-27 06:40

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

Module Module1

  Dim p

    Sub Main()
        CreateObject(\"Wscript.Shell\").Run(\"progr         


        
相关标签:
3条回答
  • 2020-11-27 07:18

    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.

    0 讨论(0)
  • 2020-11-27 07:18

    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.

    0 讨论(0)
  • 2020-11-27 07:33

    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
    
    0 讨论(0)
提交回复
热议问题