在VB脚本中调用的VB脚本



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

  1. 脚本A在调用B之前调用了多个其他脚本,它们都能工作
  2. 所有脚本都放在同一个文件夹中
  3. 问题是B没有接到电话
  4. 如果我们双击B,它工作得很好

我们调试如下。

  1. 我们试图通过在调用B之前/之后放置MsgBox来进行调试。同时作为B中的第一条语句。无显示
  2. 只是为了查看是否调用了正确的脚本路径,我们删除了B,脚本A挂起,表明它找不到B

我不知道出了什么问题,令人费解,很奇怪!

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


更新

我的道歉!代码行太多,无法完整发布脚本。因此张贴了文字说明。以下是代码片段。

票据

  1. MsgBox脚本B调用之前显示得很好
  2. MsgBox在脚本B调用之后也只显示"ReturnCode"为空
  3. 脚本B中的MsgBox(第一行)不会显示

脚本A

'...
'...
MsgBox "ready to execute Script B"
If swPrint Then
cmdExecute = RootDir & "ScriptsMasterApplication" & 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"
'....
'....

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


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

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

\\ScriptB-PARAMETER1-PARAMTER2.

谢谢。

点1。

如果你想从ExecuteStep发回ReturnCode,你需要将其作为一个函数:

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)

相关内容

  • 没有找到相关文章

最新更新