在VB脚本中调用VB脚本

时间:2017-01-11 16:42:00

标签: vbscript wsh byref

我们使用ByRef在VB脚本(脚本A)中调用VB脚本(比如脚本B)。

  1. 脚本A在调用B之前调用多个其他脚本并且它们可以工作。
  2. 所有脚本都放在同一个文件夹中。
  3. 问题是B没有被调用!
  4. 如果我们双击B,它就可以了!
  5. 我们调试如下。

    1. 我们尝试通过在调用B之前/之后放置MsgBox进行调试。并且还作为B中的第一个语句进行调试。无显示。
    2. 只是为了查看是否正在调用正确的脚本路径,我们删除了B并且脚本A挂起 - 表示它找不到B!
    3. 我不确定这是什么问题,令人费解和奇怪!

      感谢任何有关如何解决问题的建议!

      已更新

      我的道歉!有太多行代码可以完整地发布脚本。因此发布了文字说明。以下是代码中的代码段。

      请注意

      1. MsgBox在脚本B调用之前显示正常!
      2. MsgBox在脚本B调用之后也显示“ReturnCode”为空白!
      3. 脚本B中的
      4. MsgBox(第一行)没有显示。
      5. 脚本A

        '...
        '...
        
        MsgBox "ready to execute Script B"
        
        If swPrint Then
            cmdExecute = RootDir & "Scripts\Master\Application\" & ScriptB & " //B " & _
            "-JOB=" & strJobNumber & " " & "-APP=" & strApp & strEnv & strMRO & strZIP & " " & "-QAPDF=" & strQAPDF & " " & "-QAPRNT=" & strQAPRNT
            MsgBox "execute Script B " & cmdExecute
            ExecuteStep cmdExecute
            MsgBox "back from Script B " & ReturnCode
        End If
        
        
        Public Sub ExecuteStep(ByRef ExecCommandLine)
            If swStartStop Then
                ReturnCode = VSShell.Run(ExecCommandLine, , True)
                CheckForError ReturnCode, intStep, ExecCommandLine
            End If
        End Sub
        

        脚本B

        MsgBox "in Script B"
        '....
        '....
        

        感谢您调查此事的时间。如果这些片段没有意义,请告诉我。谢谢。

        仍然习惯论坛上的EDIT。感谢@omegastripes花时间编辑消息。

        就“MsgBox”的输出执行脚本B“& cmdExecute”而言,它只不过是带参数的脚本B文件的路径。这些参数与脚本B之前传递给所有脚本的参数相同。

        \\ ScriptB -PARAMETER1 -PARAMTER2 ..

        谢谢。

1 个答案:

答案 0 :(得分:0)

第1点。

如果您想从ReturnCode发回ExecuteStep,则需要将其设为功能:

Function ExecuteStep(ExecCommandLine) 
    If swStartStop Then 
        ReturnCode = VSShell.Run(ExecCommandLine, , True) 
        CheckForError ReturnCode, intStep, ExecCommandLine 
    End If
    ExecuteStep = ReturnCode
End Function

然后

If swPrint Then
    ...
    ...
    ' This will call ExecuteStep and pass back the ReturnCode
    ' ----------------------------------------------------------
    MsgBox "back from Script B " & ExecuteStep(cmdExecute)
End If

第2点

我怀疑脚本B没有被调用,因为swStartStop正在评估False ...错误或错误。最好在脚本顶部使用Option Explicit,这会强制您声明(dim)所有变量,并在运行时提取拼写错误。还将所有必需的变量作为参数传递给函数,以使数据流更清晰。

Function ExecuteStep(ExecCommandLine, swStartStop)